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

来源:互联网 发布:react 引用js 编辑:程序博客网 时间:2024/05/29 08:54

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;}
0 0
原创粉丝点击