SWUST1070: 邻接矩阵存储简单路径

简介: SWUST1070: 邻接矩阵存储简单路径

题目描述


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


输入

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

输出

输出图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


#include <iostream>
using namespace std;
int n;
int start,last;
const int N = 1010;
int st[N], path[N];
int g[N][N];
void dfs(int u, int t)
{
  path[t] = u;
  if(u == last){
    for(int i = 0; i < t; i++){
      cout<<path[i];
    }
    cout<<last<<endl;
    return;
  }
  st[u] = 1;
  for(int i = 0; i < n; i++){
    if(st[i] == 0&&g[u][i]==1) dfs(i, t + 1);
  } 
  st[u] = 0;
}
int main()
{
  cin>>n;
  cin>>start>>last;
  for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
      cin>>g[i][j];
    }
  }
  dfs(start, 0);
  return 0;
}


注释版

#include <iostream>
using namespace std;
int n;//点的个数 
int start,last;//表示起点和终点 
const int N = 1010;
int st[N], path[N];//st[N]表示是否遍历过该点,path[N]存储路径 
int g[N][N];//存地图 
void dfs(int u, int t)
{
  //将点存入路径中 
  path[t] = u;
  //如果这个点是终点,输出路径 
  if(u == last){
    for(int i = 0; i < t; i++){
      cout<<path[i];
    }
    cout<<last<<endl;
    return;
  }
  //遍历过的点修改st为1 
  st[u] = 1;
  //如果下个点没有遍历过且与该点连通,继续遍历 
  for(int i = 0; i < n; i++){
    if(st[i] == 0&&g[u][i]==1) dfs(i, t + 1);
  } 
  //回溯过程再次修改为0 
  st[u] = 0;
}
int main()
{
  cin>>n;
  cin>>start>>last;
  for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
      cin>>g[i][j];
    }
  }
  //从起点开始遍历, 0表示第一次 
  dfs(start, 0);
  return 0;
}


目录
相关文章
|
5月前
|
存储 数据可视化 算法
原始边列表转换为邻接矩阵
【6月更文挑战第23天】在图论和网络分析中,图由节点和边构成,可以用邻接矩阵表示。Python代码展示了如何从边列表`(0, 1), (0, 2), (1, 2), (2, 3)`转换成邻接矩阵,涉及有向/无向图、权重处理及稀疏矩阵优化。此外,还包括了使用NetworkX库进行图可视化以及将邻接矩阵逆向转换为边列表。这些方法在处理大规模图数据时尤其重要,如社交网络分析和交通规划。
43 1
|
5月前
|
存储
技术心得记录:图的概念和存储(邻接矩阵,邻接表)
技术心得记录:图的概念和存储(邻接矩阵,邻接表)
20 0
|
6月前
|
存储 容器
图的存储结构之打印邻接表
图的存储结构之打印邻接表
|
6月前
|
测试技术
【树】【图论】【树路径】【深度优先搜索】2867. 统计树中的合法路径数目
【树】【图论】【树路径】【深度优先搜索】2867. 统计树中的合法路径数目
|
6月前
leetcode-6110:网格图中递增路径的数目
leetcode-6110:网格图中递增路径的数目
48 1
|
6月前
|
存储 机器学习/深度学习 人工智能
无向图的邻接矩阵可用一维数组存储
无向图的邻接矩阵可用一维数组存储
229 0
|
6月前
|
存储 算法 程序员
【算法训练-二叉树 六】【路径和计算】路径总和I、路径总和II、路径总和III、二叉树的最大路径和
【算法训练-二叉树 六】【路径和计算】路径总和I、路径总和II、路径总和III、二叉树的最大路径和
77 0
|
存储 算法 Java
计算图中两个顶点的所有路径,你会吗
计算图中两个顶点的所有路径,你会吗
290 0
计算图中两个顶点的所有路径,你会吗
|
存储 前端开发 程序员
寻找矩阵中的路径
寻找矩阵中的路径
寻找矩阵中的路径
|
算法
哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径
哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径
146 0