不是很会代码写的也不对,谢谢看看
1
#include <bits/stdc++.h>
#define Infinity 32766
#define MaxVertexNum 50
using namespace std;
//图的邻接矩阵存储结 AdjacencyMatrixGraph
typedef struct AMGraph {
char vex[MaxVertexNum]; //结点名表
int arc[MaxVertexNum][MaxVertexNum]; //边表
int vexnum, arcnum; //结点数和边数
}AMGraph;
int FindVex (AMGraph G, char v)
{
for (int i = 0; i < G.vexnum; i++)
{
if (G.vex[i] == v)
return i;
}
return -1;
}
//无向图
void GraphCreate (AMGraph &G)
{
//输入结点数,边数,结点序列
cin >> G.vexnum >> G.arcnum;
for (int i = 0; i < G.vexnum; i++)
cin >> G.vex[i];
//初始化
for (int i = 0; i < G.vexnum; i++)
for (int j = 0; j < G.vexnum; j++)
G.arc[i][j] = 0;
//构造邻接矩阵
char v1, v2;
for (int k = 0; k < G.arcnum; k++)
{
cin >> v1 >> v2;
int i = FindVex (G, v1);
int j = FindVex (G, v2);
G.arc[i][j] = G.arc[j][i] = 1;
}
}
int visited[MaxVertexNum] = {0};
vector <int> v;
//基于DFS查找图中所有路径
void AllPathDFS (AMGraph G, int StartV, int EndV)
{
visited[StartV] = 1;
v.push_back (StartV);
for (int j = 0; j < G.vexnum; j++)
{
if (StartV == EndV)
{
for (int k = 0; k < v.size(); k++)
{
cout << G.vex[v[k]] << " ";
}
puts ("");
v.pop_back ();
visited[StartV] = 0;
break;
}
if (visited[j] == 0 && G.arc[StartV][j] == 1)
AllPathDFS (G, j, EndV);
}
}
int main ()
{
AMGraph G;
GraphCreate (G);
AllPathDFS (G, 0, G.vexnum - 1);
return 0;
}
用DFS实现所有路径的查找
样例
4 5
ABCD
AB
AD
BC
BD
CD