http://codevs.cn/problem/1506/
BFS。没做过广度优先搜索的题。第一次做,大部分是搬抄源代码。希望下次做的时候可以有更好的理解。
ps:源码是C语言的,抄成C++的过程出了个错。c语言的memeset初始化,我以为在声明 的时候初始化就可以了,可是没注意到 在for循环的时候竟然也有memset愁死我啦。最后copy源代码改来改去才发现啦。也算是get了一个debug的技能吧。写了这么多~~~
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string.h>
#include<map>
#include<algorithm>
using namespace std;
int tu[1005][1005]={0};
int visited[1005]={0};
int flag[1005]={0};
int main()
{
int n,m;
cin>>n>>m;
int x,y;
for (int i = 1; i <= m; i++)
{
cin>>x>>y;
tu[x][y]=1;
}
int q[1005]={0};
int front,rear;
for (int k = 1; k<=n; k++)
{
front=0;
rear=0;
rear++;
q[rear]=k;
memset(visited, 0, sizeof(visited));
while(front<rear)
{
front++;
for (int j = 1; j <=n; j++)
{
/* code */
if (tu[q[front]][j]==1&&visited[j]==0)
{
/* code */
rear++;
q[rear]=j;
visited[j]=1;
if (q[rear]==k)
{
/* code */
flag[k]=1;
break;
}
}
}
if (flag[k]==1)
{
/* code */
break;
}
}
}
for (int i = 1; i <=n; i++)
{
/* code */
if (flag[i]==1)
{
/* code */
printf("T\n");
}else
{
printf("F\n");
}
}
return 0;
}