博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2488 A Knight's Journey-dfs
阅读量:5154 次
发布时间:2019-06-13

本文共 1427 字,大约阅读时间需要 4 分钟。

题目链接:

题目解读:首先得弄清楚国际象棋中关于“马走日”的规则,如上图中的马,它的下一步的走法有8中,所以对每一个位置的马,它所能走的8个方向坐标设置为

dir[8][2]= {

{
-1,-2},{
1,-2},{
-2,-1},{
2,-1},{
-2,1},{
2,1},{
-1,2},{
1,2}};

对于最后一组测试案例4 3

画出图解如下:

解题代码:

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 int vis[100][100]; 7 int p,q,flag; 8 int dir[8][2]= {
{-1,-2},{
1,-2},{-2,-1},{
2,-1},{-2,1},{
2,1},{-1,2},{
1,2}}; 9 struct node{10 int x,y;11 }a[100];12 void dfs(int x,int y,int step)13 {14 a[step].x=x; a[step].y=y;15 if(step==p*q){16 for(int i=1;i<=step;i++)17 printf("%c%d",a[i].y-1+'A',a[i].x);18 printf("\n");19 flag=1;20 }21 if(flag) return;22 for(int i=0;i<8;i++){23 int xx=x+dir[i][0];24 int yy=y+dir[i][1];25 if(xx>0&&xx<=p &&yy>0&&yy<=q && vis[xx][yy]==0){26 vis[xx][yy]=1;27 dfs(xx,yy,step+1);28 vis[xx][yy]=0;29 }30 }31 }32 int main()33 {34 int T,cnt=1;scanf("%d",&T);35 while(T--){36 flag=0;37 memset(vis,0,sizeof(vis));38 scanf("%d%d",&p,&q);39 printf("Scenario #%d:\n",cnt++);40 vis[1][1]=1;41 dfs(1,1,1);42 if(flag==0)43 printf("impossible\n");44 printf("\n");45 }46 return 0;47 }

转载于:https://www.cnblogs.com/LJHAHA/p/10324804.html

你可能感兴趣的文章
查看mysql表大小
查看>>
命令行程序测试自动化
查看>>
My Blog
查看>>
array_reduce() 与 array_map()
查看>>
SASS实现代码的重用:混合器Mixin、继承
查看>>
《windows核心编程系列》三谈谈内核对象及句柄的本质
查看>>
Linux下安装maven
查看>>
使用OpenMP实现并行归并排序(Report)
查看>>
转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量...
查看>>
linux nohup【转】
查看>>
SQL语句优化
查看>>
校验银行卡号是否符合Luhn算法及生成符合Luhn算法的银行卡号
查看>>
MFC 双缓冲加载背景
查看>>
记录自己最近的学习状态
查看>>
hdu 1142 最短路+记忆化深搜---好题
查看>>
day 018 面向对象--约束和异常处理
查看>>
Day3_基本数据类型
查看>>
Fire Maze(广度优先搜索)
查看>>
Linux Kernel API
查看>>
oracle学习
查看>>