zoukankan      html  css  js  c++  java
  • 基于邻接表的深度优先搜索遍历

    基于邻接表的深度优先搜索遍历

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述

    请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。

    输入

    输入第一行为整数n(0 < n < 100),表示数据的组数。 对于每组数据,第一行是两个整数k,m(0 < k < 100,0 < m < k*k),表示有m条边,k个顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。

    输出

    输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示DFS的遍历结果。

    示例输入

    1
    4 4
    0 1
    0 2
    0 3
    2 3

    示例输出

    0 1 2 3
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<queue>
     6 using namespace std;
     7 struct vode
     8 {
     9     int v;
    10     struct vode *next;
    11 };
    12 struct vode *f[1000001];
    13 int m,n,k,flag,visited[101];
    14 void add(int u,int v)
    15 {
    16     struct vode *p;
    17     p=(struct vode *)malloc(sizeof(struct vode));
    18     p->v=v;
    19     p->next=f[u];
    20     f[u]=p;
    21 }
    22 void paixu(struct vode *head)
    23 {
    24     struct vode *p,*q;
    25     int k=0;
    26     while(k=!k)
    27     {
    28         p=head;
    29         q=p->next;
    30         while(q)
    31         {
    32             if(p->v>q->v)
    33             {
    34                 int t;
    35                 t=p->v;
    36                 p->v=q->v;
    37                 q->v=t;
    38                 k=0;
    39             }
    40             else
    41             {
    42                 p=p->next;
    43                 q=p->next;
    44             }
    45         }
    46     }
    47 }
    48 void dfs(int k)
    49 {
    50     if(flag==0)
    51     {
    52         cout<<k;
    53         flag=1;
    54     }
    55     else
    56         cout<<" "<<k;
    57     visited[k]=1;
    58     struct vode *p;
    59     p=f[k];
    60     paixu(p);
    61     while(p)
    62     {
    63         if(visited[p->v]==0)
    64             dfs(p->v);
    65         p=p->next;
    66     }
    67 }
    68 int main()
    69 {
    70     int zong;
    71     cin>>zong;
    72     while(zong--)
    73     {
    74         flag=0;
    75         memset(f,0,sizeof(f));//词句不可缺少
    76         memset(visited,0,sizeof(visited));
    77         cin>>m>>n;
    78         int i;
    79         for(i=1;i<=n;i++)
    80         {
    81             int u,v;
    82             cin>>u>>v;
    83             add(u,v);
    84             add(v,u);
    85         }
    86         dfs(0);
    87         cout<<endl;
    88     }
    89     return 0;
    90 }
    View Code
  • 相关阅读:
    Python解释器安装
    有钱就放余额宝的人,这个习惯恐怕要改一改!
    这么详细的存储基础知识,你不看看? 会后悔的!
    超全!华为交换机端口vlan详解~
    华为:鸿蒙绝不是安卓换皮!!!
    VS Code 真的会一统江湖吗?
    用户与安全 -(1)Linux用户及组管理
    运维必看!这个技能薪水28.8万,工资竟然还只是零花钱....
    原来 Linux 日志文件系统是这样工作的~
    干货长文:Linux 文件系统与持久性内存介绍
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3242767.html
Copyright © 2011-2022 走看看