SDUT 数据结构实验之图论四:迷宫探索 (DFS)

来源:互联网 发布:淘宝客服介入处理时间 编辑:程序博客网 时间:2024/05/01 07:14

DFS收索所有的经过路径。且注意当返回时直接v进入数组即可。


#include<cstdio>#include<cstring>#include<iostream>#include<queue>#include<cmath>#include<math.h>#include<ctime>#include<set>#include<cstdlib>#include<map>#include<algorithm>#define LL long longusing namespace std ;bool vis[100000];bool Map[1000][1000];int ans,vex[1000000],n,f[10000],cnt;int bj;void dfs1(int v){    vex[ans++]=v;    vis[v]=true;    for(int i=1; i<=n; i++)    {        if(!vis[i]&&(Map[v][i]) )        {            dfs1(i);            //vis[i]=false;            vex[ans++]=v;        }    }}int fi(int r){    return r==f[r]?r:f[r]=fi(f[r]);}void mer(int a,int b){    int x=fi(a);    int y=fi(b);    if(x>y)        f[x]=y;    else        f[y]=x;}int main(){    int m,i,j,k;    int cla,a,b,s;    scanf("%d",&cla);    while(cla--)    {        scanf("%d%d%d",&n,&m,&s);        for(i=1; i<=n; i++)            f[i]=i;        // memset(head,-1,sizeof(head));        memset(vis,false,sizeof(vis));        cnt=ans=0;        memset(Map,false,sizeof(Map));        for(i=0; i<m; i++)        {            scanf("%d%d",&a,&b);            Map[a][b]=Map[b][a]=true;            mer(a,b);        }        int tmp=0;        for(i=1; i<=n; i++)            if(f[i]==i)                tmp++;        dfs1(s);        if(tmp==1)        {            for(i=0; i<ans; i++)                i==ans-1?printf("%d\n",vex[i]):printf("%d ",vex[i]);        }        else        {            for(i=0; i<ans; i++)                printf("%d ",vex[i]);            printf("0\n");        }    }    return 0;}


0 0
原创粉丝点击