题目
求一个图最多能连通多少个点
代码(深搜)
#include < cstdio >
#include < algorithm >
using namespace std;
bool g[101][101],v[101]; int n,x,y,s,ans;
void dfs(int i){
v[i]=1;
for (int j=1;j<=n;j++)
if (g[i][j]&&!v[j]){s++; dfs(j);}
}
int main(){
scanf("%d",&n);
scanf("%d%d",&x,&y);
while (x&&y){g[x][y]=1;g[y][x]=1;scanf("%d%d",&x,&y);}//无向图
for (int i=1;i<=n;i++) if (!v[i]) v[i]=1,s=0,dfs(i),ans=max(ans,s+1);
printf("%d",ans);
return 0;
}
代码(广搜)
#include < cstdio>
#include < algorithm>
using namespace std;
bool g[101][101],v[101]; int n,x,y,s,ans;
void bfs(int i){
int head=0,tail=1,stat[101];
stat[1]=i;
do{
head++;
for (int j=1;j<=n;j++)
if (g[stat[head]][j]&&!v[j]){
stat[++tail]=j;
s++; v[j]=1;
}
}while (head< tail);
}
int main(){
scanf("%d",&n);
scanf("%d%d",&x,&y);
while (x&&y){g[x][y]=1;g[y][x]=1;scanf("%d%d",&x,&y);}//无向图
for (int i=1;i<=n;i++) if (!v[i]) v[i]=1,s=0,bfs(i),ans=max(ans,s+1);
printf("%d",ans);
return 0;
}