zoukankan      html  css  js  c++  java
  • 邻接矩阵存储简单路径(1070)

    描述


    假设无向图G采用邻接矩阵存储,设计一个算法,输出图G中从顶点u到v的所有简单路径。

    input

    简单路径是指路径上的顶点不重复。第一行为一个整数n,表示顶点的个数(顶点编号为0到n-1),第二行表示顶点u和v的编号,接下来是为一个n*n大小的矩阵,表示图的邻接关系。数字为0表示不邻接,1表示不邻接。

    output

    输出图G中从顶点u到v的所有简单路径。

    样例输入

    5
    0 3
    0 1 0 1 1
    1 0 1 1 0
    0 1 0 1 1
    1 1 1 0 1
    1 0 1 1 0


    样例输出

    0123
    01243
    013
    03
    04213
    0423
    043
     
    这道题我用的是深度优先搜索,用一个数组来存储经过的节点,并在遍历到节点是先标记为已遍历,遍历到目标节点时立即用数组进行输出,之后等一次路径输出后立即将标记改为为遍历,具体代码如下:
     
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 #include<string.h>
     5 using namespace std;
     6  
     7 #define maxsize 1000
     8  
     9 vector<int>map[maxsize];
    10 int p[maxsize];
    11 int vis[maxsize];
    12 int start,end;
    13 int n;
    14  
    15 void init()
    16 {
    17     memset(p,0,sizeof(p));
    18     memset(vis,0,sizeof(vis));
    19     for(int i=0;i<n;i++)map[i].clear();
    20     cin>>n>>start>>end;
    21     int num;
    22     for(int i=0;i<n;i++)
    23     for(int j=0;j<n;j++)
    24     {
    25         cin>>num;
    26         if(num!=0)
    27         map[i].push_back(j);
    28     }
    29      
    30 }
    31  
    32 void print(int u)
    33 {
    34     for(int i=0;i<=u;i++)
    35     {
    36         cout<<p[i];
    37     }
    38     cout<<endl;
    39 }
    40  
    41 void dfs(int u,int t)
    42 {
    43     p[t]=u;
    44     if(u==end)
    45     {
    46         print(t);
    47         return;
    48     }
    49      
    50     vis[u]=1;
    51     for(int i=0;i<map[u].size();i++)
    52     {
    53         int v=map[u][i];
    54         if(vis[v]==0)dfs(v,t+1);
    55     }
    56     vis[u]=0;
    57 }
    58  
    59 int main()
    60 {
    61     init();
    62     dfs(start,0);
    63     return 0;
    64  } 


  • 相关阅读:
    Linux进程理解与实践(四)wait函数处理僵尸进程
    Linux进程理解与实践(三)进程终止函数和exec函数族的使用
    system V信号量和Posix信号量
    Linux进程间通信方式--信号,管道,消息队列,信号量,共享内存
    linux 高并发socket通信模型
    信号集函数
    进程间通信使用信号
    使用消息队列
    改变域名,php
    php函数
  • 原文地址:https://www.cnblogs.com/swust-wangyf/p/6749313.html
Copyright © 2011-2022 走看看