• swust oj 1068


    图的按录入顺序深度优先搜索

     
     
    5000(ms)      
     
    10000(kb)
     
    Tags: 深度优先
     
     
    图的深度优先搜索类似于树的先根遍历,即从某个结点开始,先访问该结点,
    然后深度访问该结点的第一棵子树,依次为第二顶子树。如此进行下去,直
    到所有的结点都访问为止。在该题中,假定所有的结点以“A”至“Z”中的若干字
    符表示,且要求结点的访问顺序根据录入的顺序进行访问。如果结点录入的顺
    序为HUEAK,从H开始进行深度优先搜索,则可能的搜索结果为:H->A->K->U>E.

    输入

    第一行为一个整数n,表示顶点的个数,第二行为n个大写字母构成的字符串,
    表示顶点,接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为
    0表示不邻接,否则为相应的边的长度。最后一行为一个字符,表示要求进行
    深度优先搜索的起始顶点。

    输出

    用一行输出深度优先搜索结果,起始点为给定的顶点。

    样例输入

    5
    HUEAK
    0 0 2 3 0
    0 0 0 7 4
    2 0 0 0 0
    3 7 0 0 1
    0 4 0 1 0
    H

    样例输出

    HEAUK
      1 #include<iostream>
      2 #include<cstdio>
      3 #include<string>
      4 using namespace std;
      5 
      6 char Node[1000];
      7 int Mark[1000]={0},Map[1000][1000],n;
      8 
      9 void dfs(int x){
     10     cout<<Node[x];
     11     for(int i=0;i<n;i++){
     12         if(Map[x][i]&&!Mark[i]){
     13             Mark[i]=1;
     14             dfs(i);
     15         }
     16     }
     17 }
     18 
     19 int main()
     20 {
     21     char S;
     22     cin>>n;
     23     scanf("%s",Node);
     24     for(int i=0;i<n;i++)
     25         for(int j=0;j<n;j++)
     26             cin>>Map[i][j];
     27     cin>>S;
     28     int i=0;
     29     while(Node[i]!=S)i++;
     30     Mark[i]=1;
     31     dfs(i);
     32     return 0;
     33 }
  • 相关阅读:
    动态代理有啥用(总结)
    ES6随笔--各数据类型的扩展(4)--数组和对象
    ES6随笔--各数据类型的扩展(2)--数值
    ES6随笔--各数据类型的扩展(1) --字符串和正则
    ES6随笔--声明变量
    CommonJS随记
    DOM练习小记--一个简单的Web页面游戏
    js随笔--关于事件
    js随笔--关于this
    js随笔--循环里的弯弯绕
  • 原文地址:https://www.cnblogs.com/Iwpml-595/p/10672655.html
Copyright © 2020-2023  润新知