为什么一个垃圾深搜会搞了我一两天。。。。POJ-1321-棋盘问题
2016-03-01 17:33
399 查看
原因是:边界处理我总是弄不对。。。。
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn = 18;int vis[maxn];int s[maxn][maxn];int ans, N, K;void dfs(int cur, int chess) {if(cur > N+1) return ;if(chess == K+1) {ans++; return ;}for(int i = 1; i <= s[cur][0]; i++) {int tc = s[cur][i];if(!vis[tc]) {vis[tc] = 1;dfs(cur+1, chess+1);vis[tc] = 0;}}dfs(cur+1, chess);}int main() {while(cin >> N >> K && (N != -1 || K!= -1)) {memset(vis, 0, sizeof(vis));memset(s, 0, sizeof(s));ans = 0;for(int i = 1; i <= N; i++) {int cnt = 0;for(int j = 1; j <= N; j++){char ch;cin >> ch;if(ch == '#') s[i][++cnt] = j;}s[i][0] = cnt;}dfs(1, 1);cout << ans << endl;}return 0;}这个是单纯的暴力枚举!!!!!!!!!!!!! 范围很小。。。。
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn = 18;int vis[maxn];int s[maxn][maxn];int ans, N, K;void dfs(int cur, int chess) {if(cur > N) return ;if(chess == K) {ans++; return ;}for(int i = 0; i < s[cur][0]; i++) {int tc = s[cur][i+1];if(!vis[tc]) {vis[tc] = 1;dfs(cur+1, chess+1);vis[tc] = 0;}}dfs(cur+1, chess);}int main() {while(cin >> N >> K && (N != -1 || K!= -1)) {memset(vis, 0, sizeof(vis));memset(s, 0, sizeof(s));ans = 0;for(int i = 0; i < N; i++) {int cnt = 0;for(int j = 0; j < N; j++){char ch;cin >> ch;if(ch == '#') s[i][++cnt] = j;}s[i][0] = cnt;}dfs(0, 0);cout << ans << endl;}return 0;}
相关文章推荐
- Past Continuous
- .NET使用VS2010开发Web Service
- 作业1
- 通过CSS让html网页中的内容不可选
- IntelliJ IDEA中怎么查看方法说明
- hihoCoder 1014 Trie树
- tomcat7加入windows服务
- Activity 切换动画特效
- Linux下Java性能监控
- android framework 图解分享
- sqlite里执行查询提示未启用约束、主键冲突之——数据竟能超字段长度存储
- 24.Plugin System
- tsm 定义dr unknown问题处理
- 对shcema的理解
- spring对AOP的支持 jdk和cglib
- Unicode and .NET
- 浅谈web网站架构演变过程
- Xutils3.0下载带通知栏通知
- 检测函数和变量是否存在
- 几种可以实现在不同设备动态正常显示表格数据的方式