邻接矩阵存储简单路径

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

输入

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

输出

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

样例输入

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
#include<iostream>
using namespace std;
int n,u,v;
int mat[105][105];
int ans[105];
int vis[105] = {0};
void print(int s,int e)
{
    for(int i = s;i<e;i++)
    {
        cout << ans[i];
    }
    cout << endl; 
}
void DFS(int k,int start)
{
    if(start == v)
    {
        //ans[k] = v;
        print(0,k); 
        return;
    }
    vis[start] = 1;
    for(int i = 0;i<n;i++)
    {
        if(vis[i]==1 || mat[start][i]==0)
        continue;
        ans[k] = i;
        DFS(k+1,i);
    }
    vis[start] = 0;
}
int main()
{
    cin >> n >> u >> v;
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<n;j++)
        {
            cin >> mat[i][j];
        }
    }
    ans[0] = u;
    DFS(1,u);
    return 0;
}

阅读更多
版权声明:未经博主允许不能转载文章 https://blog.csdn.net/weixin_42103959/article/details/80696299
个人分类: 数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭