算法思想: 选一个点作为起始点,在深度优先遍历的过程中寻找路径,在遍历过程中,在回溯前判断是否已访问所有顶点,如果没有则取消本顶点的访问。如果整个遍历结束都没有找到路径,则换一个起始点重新深度优先遍历。所有点都试过后,如果未找到路径则输出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(pat