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;
}


目录
相关文章
|
20天前
|
算法 前端开发
判断路径是否相交
判断路径是否相交
23 0
|
20天前
|
存储 容器
图的存储结构之打印邻接表
图的存储结构之打印邻接表
|
20天前
|
测试技术
【树】【图论】【树路径】【深度优先搜索】2867. 统计树中的合法路径数目
【树】【图论】【树路径】【深度优先搜索】2867. 统计树中的合法路径数目
|
20天前
leetcode-6110:网格图中递增路径的数目
leetcode-6110:网格图中递增路径的数目
24 1
|
20天前
|
存储 机器学习/深度学习 人工智能
无向图的邻接矩阵可用一维数组存储
无向图的邻接矩阵可用一维数组存储
92 0
|
20天前
|
存储 算法 程序员
【算法训练-二叉树 六】【路径和计算】路径总和I、路径总和II、路径总和III、二叉树的最大路径和
【算法训练-二叉树 六】【路径和计算】路径总和I、路径总和II、路径总和III、二叉树的最大路径和
53 0
|
算法
哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径
哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径
114 0
|
存储 算法 Java
计算图中两个顶点的所有路径,你会吗
计算图中两个顶点的所有路径,你会吗
249 0
计算图中两个顶点的所有路径,你会吗
|
存储 前端开发 程序员
寻找矩阵中的路径
寻找矩阵中的路径
寻找矩阵中的路径
|
机器人
跟我打卡LeetCode 61旋转链表&62不同路径&63不同路径 II
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
176 0
跟我打卡LeetCode 61旋转链表&62不同路径&63不同路径 II