#include<bits/stdc++.h>
using namespace std;
typedef struct Arcnode {
int adjvex;
struct Arcnode* nextarc;
}Arcnode;
typedef struct Vnode {
int data;
Arcnode* firstarc;
}Vnode,AdjList[1024];
typedef struct ALGraph {
int vexnum, arcnum;
AdjList vertices;
}ALGraph;
void printfGraph(int path[], int k) {
int i;
for (i = 0; i <= k; i++) {
cout << path[i] << " ";
}
cout << endl;
}
void findpath(ALGraph& G, int u, int v, int path[], int d,int visited[]) {
int w, i;
Arcnode* p;
d++; //路径长度加1;
path[d] = u;
visited[u] = 1;
if (u == v) {
printfGraph(path, d);
}
p = G.vertices[u].firstarc;
while (p != NULL) {
w = p->adjvex;
if (visited[w] == 0) {
findpath(G, w, v, path, d,visited);
}
p = p->nextarc;
}
visited[u] = 0;
}
void create(ALGraph& G) {
cin >> G.vexnum >> G.arcnum;
int i;
for (i = 1; i <= G.vexnum; i++) {
cin >> G.vertices[i].data;
G.vertices[i].firstarc = NULL;
}
for (i = 1; i <= G.arcnum; i++) {
int m, n;
cin >> m >> n;
Arcnode* q = new Arcnode;
q->adjvex = n;
q->nextarc = G.vertices[m].firstarc;
G.vertices[m].firstarc = q;
}
}
int path[1024] = { 0 };
int visited[1024] = { 0 };
int main() {
ALGraph G;
create(G);
int d = -1;
int u, v;
cin >> u >> v;
findpath(G, u, v, path, d,visited);
}
从u到v的简单路径
于 2023-02-06 21:01:05 首次发布