poj 2837 Silver Matrix 不使用栈的深搜
来源:互联网 发布:sql server2008百度云 编辑:程序博客网 时间:2024/06/01 17:25
题意:
给定k,让构造一个2^k*2^k的矩阵,使得对任意i,第i行和第i列由1,2,...2^k-1这2^k-1个数组成。
分析:
很明显是个深搜题。设n=2^k,则搜素树高度(状态空间维度)为n,每个状态可扩展n个状态,复杂度n^n,大概是512^512。。。所以必须有强力的剪枝而且不要用递归去写。一般对深搜来说,搜索树高度固定的话可以用for循环直接枚举,不固定话要用递归或栈,这题搜索树高度不固定(n为输入),怎么办呢?。。这样可以清楚明了地搞定:dfs的while循环写法。
代码:
//poj 2837//sep9#include <iostream>using namespace std;const int maxN=520;int a[maxN][maxN];bool used[2][maxN][2*maxN];int n;void solve(){int x,y,i;x=y=1;a[x][y]=0;while(x<=n){int ok=0;for(i=a[x][y]+1;i<2*n;++i)if(!used[0][x][i]&&!used[1][x][i]&&!used[0][y][i]&&!used[1][y][i]){a[x][y]=i;used[0][x][i]=used[1][x][i]=used[0][y][i]=used[1][y][i]=true;++y;if(y>n){y=1,++x;}a[x][y]=0;ok=1;break;}if(ok==0){--y;if(y==0){y=0,--x;}i=a[x][y];used[0][x][i]=used[1][x][i]=used[0][y][i]=used[1][y][i]=false;}}}int main(){scanf("%d",&n);n=(1<<n);memset(used,false,sizeof(used));solve();for(int i=1;i<=n;++i){for(int j=1;j<=n;++j)printf("%d ",a[i][j]);printf("\n");}return 0;}
0 0
- poj 2837 Silver Matrix 不使用栈的深搜
- ag(The silver search)的使用
- poj 3268 Silver Cow Party (最短路算法的变换使用 【有向图的最短路应用】 )
- POJ 2436 USACO silver
- poj Silver Cow Party
- poj Silver Cow Party
- Silver Cow Party POJ
- Silver Cow Party POJ
- Silver Cow Party POJ
- Silver Cow Party POJ
- POJ Silver Cow Party
- Silver Cow Party POJ
- Silver Cow Party POJ
- POJ 3268 Silver Cow Party(多源最短路的转化)
- poj 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- poj 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- js实现按钮失效5秒钟
- gpio_direction_output 与 gpio_set_value
- c指针浅谈第二篇(指针与数组的关系)
- 恶补web之三:http学习
- Oracle如何执行存储过程
- poj 2837 Silver Matrix 不使用栈的深搜
- Android ContentResolver
- hibernateUtils
- 关于SVN的一些知识
- 3个典型区间贪心问题(总结篇)
- thinkphp 配置项config.php
- Android动画学习笔记-Android Animation
- Microsoft Visual Studio Ultimate 2013 旗舰版 有效注册密钥
- 四个DBHelper实现