题目大意:
判断一个图是否为一个边通图。
思路:
这道题要用到图论。
我用的是深度优先遍历。从一个点开始搜,找到其中一个与它相邻的边,再以找到的边来搜,继续寻找相连的边。把所有可到达的点都搜过了,就退出寻找,看看有没有点没有搜到。如果有,说明这个图不是连通图,否则是连通图。
代码:
#include <cstdio>
using namespace std;
int n,a[101][101],l,p,k;
int dfs(int x) //深度优先遍历
{
for (int i=1;i<=n;i++)
if (a[i][x]==1) //如果这个点可以到达
{
a[i][x]=0;
a[x][i]=0;
dfs(i); //递归
}
}
int main()
{
scanf("%d",&n);
scanf("%d%d",&l,&p);
k=l;
while (l!=0&&p!=0)
{
a[l][p]=1;
a[p][l]=1;
scanf("%d%d",&l,&p);
}
dfs(k);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (a[i][j]==1) //如果还有点没搜到
{
printf("0"); //不是连通图
return 0;
}
printf("1"); //否则是连通图
return 0;
}