传话

来源:互联网 发布:农行总行待遇 知乎 编辑:程序博客网 时间:2024/05/23 01:59

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;}
0 0