首页 > 试题广场 >

#include #include<...

[填空题]
#include<iostream>
 #include<cstring>
 using namespace std;
 const int SIZE=100;
 int n,m,r[SIZE];
 bool map[SIZE][SIZE],found;
 bool successful( )
 {
     int i;
     for(i=1;i<=n;i++)
         if(!map[r[i]][r[i%n+1]])
             return false;
     return true;
 }
 void swap(int *a,int *b)
 {
     int t;
     t=*a;
     *a=*b;
     *b=t;
 }
 void perm(int left,int right)
 {
     int i;
     if(found)
         return ;
     if(left>right)
     {
         if(successful( ))
         {
             for(i=1;i<=n;i++)
                 cout<<r[i]<<' '; 
             found=true;
         }
     return ;
     }
     for(i=left;i<=right;i++)
     {
         swap(r+left,r+i);
         perm(left+1,right);
         swap(r+left,r+i);
     }
 }
 int main( )
 {
     int x,y,i;
     cin>>n>>m;
     memset(map,false,sizeof(map));
     for(i=1;i<=m;i++)
     {
         cin>>x>>y;
         map[x][y]=true;
         map[y][x]=true;
     }
     for(i=1;i<=n;i++)
         r[i]=i;
     found=false;
     perm(1,n);
     if(!found)
         cout<<"No solution!"<<endl;
     return 0;
 }
输入:
9 12
1 2
2 3
3 4
4 5
5 6
6 1
1 7
2 7
3 8
4 8
5 9
6 9
输出:1

找字典序最小的遍历所有点的环路
发表于 2019-10-18 14:43:59 回复(0)