算法思想: 选一个点作为起始点,在深度优先遍历的过程中寻找路径,在遍历过程中,在回溯前判断是否已访问所有顶点,如果没有则取消本顶点的访问。如果整个遍历结束都没有找到路径,则换一个起始点重新深度优先遍历。所有点都试过后,如果未找到路径则输出Fail。
代码:
#include <iostream>
#include <vector>
using namespace std;
#define N 10
int visited[N]={0};
int Arc[N][N]={0};
vector<int> path;
void DFS(int a);
void HaMiDun()
{
for(int i=0;i!=N;++i)
{
if(path.empty())
DFS(i);
}
if(path.empty())
cout<<"Fail.\n";
else
{
for(int i=0;i!=N;++i)
cout<<path[i]<<" ";
}
}
void DFS(int a)
{
path.push_back(a);
visited[a]=1;
for(int i=0;i!=N;++i)
if(visited[i]==0&&Arc[a][i]==1)
DFS(i);
if(path.size()!=N)
path.pop_back();
visited[a]=0;
}
void main()
{
while(cin)//初始化图的信息 这儿设定图有10个顶点
{
cout<<"请输入边:\n";
int a,b;
cin>>a>>b;
if(cin)
Arc[a][b]=1;
}
HaMiDun();
::system("pause");
}