poj(1321)回朔搜索
来源:互联网 发布:七天网络组织代码登录 编辑:程序博客网 时间:2024/05/16 23:54
这个题目把棋子的坐标依次存进数组里,然后再分别用两个数组记录行和列有哪些已经被占用了,之后便从第一个棋子开始深搜即可,深搜函数带两个参数p,
count,p表示从当前第p个棋子开始往下搜,count表示已经放了count个棋子。
把满足条件的位置一次存储起来。再利用回朔搜索,很好;;
#include"stdio.h"
#include"string.h"
char map[100];
int qx[100],qy[100];
int visx[100],visy[100];
int n,m,cnt,k;
void dfs(int p,int count)
{
int i;
if(count==m)
{
cnt++;
return;
}
for(i=p;i<k;i++)
if(!visx[qx[i]]&&!visy[qy[i]])
{
visx[qx[i]]=1;
visy[qy[i]]=1;
dfs(i+1,count+1);
visx[qx[i]]=0;
visy[qy[i]]=0;
}
}
int main()
{
int i;
while(scanf("%d%d",&n,&m),n!=-1&&m!=-1)
{
int j;
cnt=0;k=0;
memset(visx,0,sizeof(visx));
memset(visy,0,sizeof(visy));
for(i=0;i<n;i++)
{ scanf("%s",map);
for(j=0;j<n;j++)
if(map[j]=='#')
{
qx[k]=i;
qy[k]=j;
k++;
}
}
dfs(0,0);
printf("%d\n",cnt);
}
return 0;
}
#include"stdio.h"#include"string.h"char map[100][100];int n,m,cnt,row[100];void bfs(int x,int y)//搜索第x行,已经放好了y颗棋子。。{ int i; if(y==m) { cnt++; return ; } if(x>n) return ; for(i=1;i<=n;i++) { if(map[x][i]=='#'&&!row[i])//存在位置并且这一列还没访问过。。 { row[i]=1; bfs(x+1,y+1); row[i]=0; } } bfs(x+1,y);}int main(){ int i; while(scanf("%d%d",&n,&m),n!=-1&&m!=-1) { for(i=1;i<=n;i++) scanf("%s",map[i]+1); memset(row,0,sizeof(row)); cnt=0; bfs(1,0); printf("%d\n",cnt); } return 0;}
这个方法和hdu1045的方法一样。。#include"stdio.h"#include"string.h"char map[100][100];int row[100],hang[100];int n,m,cnt;void dfs(int k,int count)//第k个点,在这个点可以放得总数。。{ int x,y; if(count==m) { cnt++; return ; } if(k>=n*n) return ; x=k/n,y=k%n; if(map[x][y]=='#'&&!row[y]&&!hang[x]) { row[y]=1; hang[x]=1; dfs(k+1,count+1); row[y]=0; hang[x]=0; } dfs(k+1,count);//和上面那个方法放的位置不同。。}int main(){ int i; while(scanf("%d%d",&n,&m),n!=-1&&m!=-1) { for(i=0;i<n;i++) scanf("%s",map[i]); memset(row,0,sizeof(row)); memset(hang,0,sizeof(hang)); cnt=0; dfs(0,0); printf("%d\n",cnt); } return 0;}
- poj(1321)回朔搜索
- poj-1321(搜索)
- Poj 1321 棋盘问题(搜索)
- POJ 1321 棋盘问题(简单搜索)
- POJ 1321 棋盘问题(搜索)
- POJ 1321 棋盘问题(搜索)
- poj 1321棋盘问题(搜索)
- poj 1321 棋盘问题(简单搜索)
- poj 1321棋盘问题(简单搜索)
- POJ 1321 棋盘问题(搜索)
- poj 1321( 搜索 )
- poj 1321搜索
- poj~1321(简单搜索)
- poj-1321(简单搜索)
- POJ 1321 搜索
- poj 1321 简单搜索
- POJ 3411(搜索)
- poj 3414(搜索)
- ios内存调试最好在真机上调试,模拟器不准确
- SQL基础-->分组与分组函数
- 操蛋的UITableView重用机制
- C++的成员函数作为回调函数
- __FILE__,__LINE__
- poj(1321)回朔搜索
- Java 正则表达式详解
- Java DecimalFormat 用法
- malloc()函数
- 转载_Linux驱动开发必看
- Linux下XWindow图形界面的基本概念
- raw socket(原始套接字)工作原理与规则
- VMware网络连接的几种方式Bridge NAT Host-only
- TextView和EditText中添加图片(ImageSpan)