POJ1321-回溯+DFS
来源:互联网 发布:php怎么找工作 编辑:程序博客网 时间:2024/06/05 00:29
https://vjudge.net/contest/165579#problem/A
开始的打算是搜出一个全排列,然后再除去k的全排列。
tle了。
于是乎打算记忆化搜索。出了一点小问题。那就是在搜索的时候,没有用xx+1,直接用的全排列和不回溯的条件。。
但是这种方法过不了两个棋子同时在同一行或一列内。还是必须用回溯搞。。。
又看了别人的代码。感觉别人的代码思路比较清晰,回溯的也挺好。
(在里在外回溯效果一样)
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <string>const int maxn=2000;using namespace std;struct Node{ char a; int x; int y;}node[maxn];bool vis[maxn];bool vis2[maxn];int m,k;int n;int sum;int summ;void dfs(int xx,int t){ if(t==k) { //cout<<xx<<"!!!"<<endl; summ++;return ;} //vis[node[xx].x]=true; //vis2[node[xx].y]=true; for(int i=xx+1;i<sum;i++) { if(!vis[node[i].x]&&!vis2[node[i].y]) { vis[node[i].x]=true; vis2[node[i].y]=true; dfs(i,t+1); vis[node[i].x]=false; vis2[node[i].y]=false; } } //vis[node[xx].x]=false; //vis2[node[xx].y]=false; return ;}int main(){ char s; //char a[maxn][maxn]; while(cin>>n>>k) { sum=1; if(n==-1&&k==-1) break; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { cin>>s; if(s=='#') { node[sum].a='#'; node[sum].x=i; node[sum].y=j; sum++; } } memset(vis,false,sizeof(vis)); memset(vis2,false,sizeof(vis2)); summ=0; dfs(0,0); cout<<summ<<endl; } return 0;}
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char a[10][10]; //记录棋盘位置int book[10]; //记录一列是否已经放过棋子int n,k;int total; //total 是放棋子的方案数 ,m是已放入棋盘的棋子数目void dfs(int cs,int m){ if(m==k) {total++;return ;} for(int i=0;i<n;i++) { if(a[cs][i]=='#'&&!book[i]) { book[i]=true; dfs(cs+1,m+1); book[i]=false;//回溯 } } if(cs<=n-2) dfs(cs+1,m);}int main(){ int i,j; while(scanf("%d%d",&n,&k)&&n!=-1&&k!=-1) //限制条件 { total=0; for(i=0; i<n; i++) scanf("%s",&a[i]); memset(book,0,sizeof(book)); dfs(0,0); printf("%d\n",total); } return 0;}
阅读全文
0 0
- POJ1321 DFS+回溯
- POJ1321 棋盘 DFS+回溯
- POJ1321-回溯+DFS
- dfs模板(回溯、四皇后)poj1321
- POJ1321 棋盘问题 —— DFS回溯
- poj1321--DFS
- poj1321 dfs
- poj1321 dfs
- poj1321 DFS
- poj1321 DFS
- [DFS]poj1321
- POJ1321 DFS
- poj1321 dfs
- poj1321 DFS
- poj1321(回溯板子)
- poj1321 棋盘问题 回溯
- poj1321(dfs)
- poj1321(dfs棋盘问题)
- DOM
- CodeForces 787A A. The Monster(扩展欧几里得)
- codeforces 811 E Vladik and Entertaining Flags(线段树+并查集)
- Lua:ipairs/pairs
- npm
- POJ1321-回溯+DFS
- caffe openpose/Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields配置
- 【已解决】开发模式下,微信公众号自定义菜单显示不全
- UnicodeDecodeError: ‘ascii’ codec……not in range(128)
- PHP如何查询MySQL数据页面并输出内容到页面,并另存为CSV或EXCEL文件
- https协议和http的区别。
- 【indeed】C
- DOM
- 搜索 F