感觉用的挺多的,就简单练习下
1表示有路,0表示无路,假设有n个1,如何判断这n个1都说连通的?
策略:深度优先搜索,搜索完判断count_是否等于n,是则连通,否则不连通
以下代码的测试数据:
0 1 1 0
0 1 0 0
1 1 1 0 为连通图
需要一个vis和used数组进行操作
#include <bits/stdc++.h>
using namespace std;
int used[3][4]={0,1,1,0,0,1,0,0,1,1,1,0};
int vis[3][4]={0};
int mx[4]={-1,0,1,0};
int my[4]={0,1,0,-1};
int count_=0;
void start(int j,int k)
{
if(j<0 || j>2 || k<0 || k>3) return;
if(used[j][k]==0) return;
if(vis[j][k]==1) return;
if(used[j][k]==1 && vis[j][k]==0)
{
++count_;
used[j][k]=1;
vis[j][k]=1;
}
for(int i=0;i<4;++i)
{
j+=mx[i];
k+=my[i];
start(j,k);
j-=mx[i];
k-=my[i];
}
return;
}
int main()
{
for(int j=0;j<3;++j)
{
for(int k=0;k<4;++k)
{
if(used[j][k]==1)
{
start(j,k);
goto endpro;
}
}
}
endpro:
cout<<count_<<endl;
return 0;
}
输出:6,则表示连通