zoukankan      html  css  js  c++  java
  • 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("}
    ");
                }
            }
            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("}
    ");
                }
            }
    
        }
        return 0;
    }
    

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

  • 相关阅读:
    HQL查询.
    Apache solr(二).
    Apache solr(一).
    Node.js入门以及第一个helloworld程序.
    SQL优化一(SQL使用技巧)
    NodeJS安装第一个工程.
    [LeetCode] 545. Boundary of Binary Tree 二叉树的边界
    [LeetCode] 41. First Missing Positive 首个缺失的正数
    [LeetCode] 749. Contain Virus 包含病毒
    [LeetCode] 803. Bricks Falling When Hit 打击砖块掉落
  • 原文地址:https://www.cnblogs.com/xryz/p/4848010.html
Copyright © 2011-2022 走看看