“佛洛依德”(音译)。?
Code:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=300;//据题目要求最大250*250,多开到300;
bool mapp[maxn][maxn]={false};//建立邻接矩阵,赋初值为假;
bool aaa[256]={0};//再建立一个布尔数组存储每个点与点【1】的连通关系;
int n,m;
void read()
{
int x,y;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
mapp[x][y]=true;mapp[y][x]=true;
}
}
void work()
{
int k=1;aaa[k]=1;mapp[1][1]=true;
for(int i=1;i<=n;i++) mapp[i][i]=true; //对角线(左上到右下)赋值为true,表示每个点与自己连通;
【 for (int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(mapp[i][j]=mapp[i][j] || (mapp[i][k]&&mapp[k][j]))
mapp[i][j]=true;】//三重循环判断每两个点是否直接连通或间接(隔点)连通,是就赋值true;
int s=0;//用s变量进行特判;
for(int i=1;i<=n;i++)
if (mapp[1][i]==0) cout<<i<<endl; //普通输出;
else s++;
if(n-s==0) cout<<'0'<<endl;//当全部点与【1】点连通输出'0';
}
int main()
{
cin>>n>>m;
ds();
work();return 0;
}
中午加注释。搞定。。
--------------------------------------------------下面该是bfs P1205------------------------------------
没改 。。马上。
好吧。深搜是dfs。。。吃完饭写注释。。
code:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=300;
bool mapp[maxn][maxn]={false};
bool aaa[256]={0};
int n,m,j;
void read()
{
int x,y;
for(int i=1;i<=m;i++)
{
cin>>x>>y;//读数
mapp[x][y]=true;mapp[y][x]=true;//双向连通
}
}
void dfs(int k)//深搜
{
aaa[k]=true;
for(int i=1;i<=n;i++)
if((!aaa[i])&&(mapp[k][i]))
dfs(i);}//挺麻烦,感觉现在懂了,但无法叙述,更不会熟练运用。【!】
int main()
{
cin>>n>>m;
read();
dfs(1);
int s=0;
for(int i=1;i<=n;i++)
if (aaa[i]==0) cout<<i<<endl;
else s++;
if(n-s==0) cout<<'0'<<endl;
return 0;
}