poj2488.特坑的一题
2016-04-17 23:11
190 查看
首先不能用队列存输出,会超时;
第二,最坑的地方,方向数组一定先排列好。因为输出要按字典序排序,所以方向数组从左往右排列好,后边就不用处理这个问题。这是最大坑点,坑了我一个小时,看了别人代码才找出这个bug!!!!!
第二,最坑的地方,方向数组一定先排列好。因为输出要按字典序排序,所以方向数组从左往右排列好,后边就不用处理这个问题。这是最大坑点,坑了我一个小时,看了别人代码才找出这个bug!!!!!
#include <iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxx=26+5; int dir[][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; int p,q; char path[maxx*maxx]; int vis[maxx][maxx]; int dfs(int x,int y,int step) { vis[x][y]=1; if(step==p*q) return 1; for(int i=0;i<8;i++) { int nx=x+dir[i][0]; int ny=y+dir[i][1]; if(nx>0&&nx<=q&&ny>0&&ny<=p&&!vis[nx][ny]) { path[step*2]=nx+'A'-1; path[step*2+1]=ny+'0'; if(dfs(nx,ny,step+1)) return 1; vis[nx][ny]=0; } } return 0; } int main() { int t; int ca=1; scanf("%d",&t); while(t--) { scanf("%d%d",&p,&q); memset(path,0,sizeof(path)); memset(vis,0,sizeof(vis)); path[0]='A'; path[1]='1'; printf("Scenario #%d:\n",ca++); if(dfs(1,1,1)) { for(int j=0;path[j]!=0;j++) printf("%c",path[j]); printf("\n\n"); } else printf("impossible\n\n"); } return 0; }
相关文章推荐
- 利用HTML5分片上传超大文件
- flash进行上传使用什么协议?
- Spring中配置数据源的4种形式
- 自考结束了
- 你是否是团队里面最默默付出的那个coder,却发现滔滔不绝的产品和设计是团队里的开心果(转)
- 都说「三观不正」,那么正确的三观是怎样的 [转]
- 笔记-->关系操作符 ==
- c++ 继承与权限
- 《第一行代码》第七章 读取系统联系人(一)
- Two Sum
- C++11 中的线程、锁和条件变量
- c++ vector用法精讲
- Scrapy入门教程之爬糗事百科
- openGL相关库的介绍
- 后缀数组
- 中国学的哲学概念“道、法、术、势”怎么理解 [转]
- Android日志Log
- TI ZigBee FAQ 常见问题解答 CC2530低功耗完成
- java基础之泛型
- 隐式意图的剖析