欧拉回路算法实现

#include

using namespace std;
const int N=9;
int graph[N][N];//图的邻接矩阵
struct stack
{
  int top;
  int node[N*N];
}path;//Euler 回路的路径
void DFS(int x)//深搜
{
   path.top++;
   path.node[path.top]=x;
   int i;
   for(i=0;i    {
      if(graph[x][i]>0)
      {
         graph[x][i]=0;graph[i][x]=0;//删除此边
         DFS(i);
         break;
      }
   }
}
void Euler_path(int x)
{
   int i,b;
   path.top=0;path.node[path.top]=x;
   while(path.top>=0)
   {
        b=0;
      for(i=0;i       {
        if(graph[path.node[path.top]][i]>0)
        {
                b=1;
                break;
        }
      }
      if(b>0)
      {
                path.top--;
                DFS(path.node[path.top+1]);
      }
      else
      cout<    }
}
int main()
{
    freopen("input.txt","r",stdin);
    int x,y,i,j;
    for(i=0;i         for(j=0;j         graph[i][j]=0;
    while(cin>>x>>y)
    {
      graph[x-1][y-1]=graph[y-1][x-1]=1;
    }
    //判断是否存在欧拉回路
   bool exist=true;
   for(i=0;i    {
       int num=0;
       for(j=0;j        {
        if(graph[i][j])//无向图
        num++;
        if(graph[j][i])
        num++;
       }
       if(num%2==1)
       {
          exist=false;
          break;
       }
   }
   if(exist)
    Euler_path(0);
   else
   {
     printf("不存在欧拉回路/n");
   }
    return 0;
}


一款非常好的锁屏APP软件: 酷划, 不仅好用, 而且还能赚钱, 官网地址: http://www.coohua.com

你可能感兴趣的:(算法,graph,ini,path,include)