#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int a[5][6],sum[31];
bool flag;
bool dis[5][6];
int dx[]={2,2,1,1,-2,-2,-1,-1};
int dy[]={1,-1,2,-2,1,-1,2,-2};
void dfs(int x,int y,int k)
{
if(flag)
return;
if(k==30)
{
flag=1;
for(int i=0;i<29;i++)
cout << sum[i]<< " ";
cout <<sum[29]<< endl;
}
for(int i=0;i<8;i++)
{
int xx=dx[i]+x;
int yy=dy[i]+y;
if(xx>=0&&yy>=0&&xx<5&&yy<6&&!dis[xx][yy])
{
sum[k]=xx*6+yy+1;
k++;
dis[xx][yy]=1;
dfs(xx,yy,k);
k--;
dis[xx][yy]=0;
}
}
}
int main()
{
int n;
while(~scanf("%d",&n)&&n!=-1)
{
sum[0]=n;
flag=0;
dis[(n-1)/6][(n-1)%6]=0;
dfs((n-1)/6,(n-1)%6,1);
}
return 0;
}
简单马周游问题(这个写的超时,以后弄懂我再改)
最新推荐文章于 2021-12-31 22:41:57 发布