从图G中找出一条包含所有顶点的简单路径(一笔画出、哈密顿路径)

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

代码:

#include
#include
using namespace std;
#define N 10
int visited[N]={0};
int Arc[N][N]={0};
vector 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<  }
}
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");
}

你可能感兴趣的:(学习笔记,资料管理)