#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
#define Infinity 32766
#define MaxVertexNum 50
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;
int pathsum = 0;
//基于DFS查找图中所有路径
void AllPathDFS (AMGraph G, int start, int end)
{
v.push_back (start);
visited[start] = 1;
if (start == end)
{
pathsum ++;
for (int k = 0; k < v.size() - 1; k++)
cout << G.vex[v[k]] << "->";
cout << G.vex[v[v.size() - 1]] << endl;
visited[v[v.size() - 1]] = 0;
v.pop_back ();
return;
}
for (int j = 0; j < G.vexnum; j++)
{
if (visited[j] == 0 && G.arc[start][j] == 1)
{
AllPathDFS (G, j, end);
}
}
visited[v.size() - 1] = 0;
v.pop_back ();
}
int main ()
{
AMGraph G;
GraphCreate (G);
AllPathDFS (G, 0, 3);
cout << "路径条数: " << pathsum << endl;
return 0;
}