06-图1. List Components (25) 栈和队列

dfs和bfs综合利用,栈和队列也是综合利用,比较考验编程基本功,主要是自己交一次就对了,好高兴。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<stack>
using namespace std;
int gra[15][15],vis[15],ans[15],n;
queue<int>q;
stack<int>s;
int bfs(int st,int cnt)
{
    int i,j,t;
    while(!q.empty()) q.pop();
    q.push(st);
    while(!q.empty())
    {
        t=q.front();
        q.pop();
        for(i=0; i<n; i++)
        {
            if(gra[t][i]==1&&vis[i]==0)
            {
                ans[cnt]=i;
                cnt++;
                q.push(i);
                vis[i]=1;
            }
        }
    }
    return cnt;
}
int dfs(int st,int cnt)
{
    int i,t,flag;
    while(!s.empty()) s.pop();
    s.push(st);
    while(!s.empty())
    {
        t=s.top();
        flag=0;
        for(i=0; i<n; i++)
        {
            if(gra[t][i]==1&&vis[i]==0)
            {
                ans[cnt]=i;
                cnt++;
                s.push(i);
                vis[i]=1;
                flag=1;
                break;
            }
        }
        if(!flag) s.pop();
    }
    return cnt;
}
int main()
{
    int i,k,a,b,cnt,j;
    while(~scanf("%d%d",&n,&k))
    {
        memset(gra,0,sizeof(gra));
        for(i=0; i<k; i++)
        {
            scanf("%d%d",&a,&b);
            gra[a][b]=gra[b][a]=1;
        }
        memset(vis,0,sizeof(vis));
        for(i=0; i<n; i++)
        {
            if(!vis[i])
            {
                vis[i]=1;
                ans[0]=i;
                cnt=dfs(i,1);
                printf("{ ");
                for(j=0; j<cnt; j++)
                {
                    printf("%d ",ans[j]);
                }
                printf("}\n");
            }
        }
        memset(vis,0,sizeof(vis));
        for(i=0; i<n; i++)
        {

            if(!vis[i])
            {
                vis[i]=1;
                ans[0]=i;
                cnt=bfs(i,1);
                printf("{ ");
                for(j=0; j<cnt; j++)
                {
                    printf("%d ",ans[j]);
                }
                printf("}\n");
            }
        }

    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

posted @ 2015-05-04 14:38  xryz  阅读(116)  评论(0编辑  收藏  举报