POJ-2837 DFS时不一定要用栈~
来源:互联网 发布:形容女人漂亮的网络词 编辑:程序博客网 时间:2024/05/17 10:03
题目很简单......但DFS时不断的递归回朔不仅使得时间效率很低...在跑9这个输入时..连系统栈都给爆了..其实仔细的思考..这题是DFS..但是可以不用栈..因为搜到了一个位置..可以很明确的知道若是失败了..我该跳回哪里..并且跳回去我还要尝试搜索哪些数..直接用个while循环就可以了...
Program:
#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#include<math.h>#include<queue>using namespace std;int n,s[520][520];bool used[2][1030][1030];void search(){ int i,x,y; s[1][1]=0; x=y=1; while (y<=n) { for (i=s[y][x]+1;i<=2*n-1;i++) if (!used[0][y][i] && !used[1][x][i] && !used[0][x][i] && !used[1][y][i]) { used[0][y][i]=used[1][x][i]=used[0][x][i]=used[1][y][i]=true; s[y][x]=i; x++; if (x>n) { y++; x=1; } s[y][x]=0; goto A; } x--; if (!x) { y--; x=n; } i=s[y][x]; used[0][y][i]=used[1][x][i]=used[0][x][i]=used[1][y][i]=false; A: ; } return;}int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); memset(used,false,sizeof(used)); scanf("%d",&n); n=(int)pow(double(2),double(n)); search(); int i,j; for (i=1;i<=n;i++) { for (j=1;j<=n;j++) printf("%d ",s[i][j]); printf("\n"); } return 0;}
- POJ-2837 DFS时不一定要用栈~
- 找下载资源不一定要用google
- POJ 1573 Robot Motion (模拟+不回溯的dfs 水题)
- POJ 1321棋盘不同行不同列问题 dfs
- 人不一定要成功,但一定要成长!
- winform程序不一定要用Main() 函数做入口
- ARM板子启动有问题,不一定要用jtag
- DFS POJ
- POJ DFS
- java中的Vector问题。取出对象时是不是一定要实例化?可以直接用Vector.get(i)获取对象不?
- 记得在执行循环命令时,一定要用unset()清内存,不然你的内存会不够用的!
- CString::GetBuffer() 不一定要ReleaseBuffer()
- POJ 3009 用DFS搜最短路径 适合用来学习DFS
- poj 3083 DFS+DFS+BFS
- poj 1416 Shredding Company (应该是用dfs吧,但是想了一下午不知道怎么递归来做,所以暴力做了)
- poj 2837 Silver Matrix 不使用栈的深搜
- 在UIView中创建 delegate的属性的时候一定要用assign,不能用retain
- 整理安装hadoop环境下JDK《JDK一定要1.6及以上,1.7不建议用》
- 如何在网站里插入视频
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]
- Android开发入门二之AndroidManfest.xml文件详细说明 .
- S3C6410裸机中断终于搞定了,不需要汇编 ,使用VIC
- C++获取函数返回地址
- POJ-2837 DFS时不一定要用栈~
- 编写一unix程序,防止僵尸进程的出现
- HTTP服务七层架构技术探讨
- 单片机的现状即发展前景
- 如何修改linux下设备名称(即用户名后的@XX)
- apt-get install 的用法
- NSMutableArray 可变数组-Objective-C
- 50+ 个 JavaScript & HTML5 框架以及相关工具
- 我们应该知道的76个常识