(简单) POJ 1321 棋盘问题,回溯。
2024-10-19 00:23:06
Description
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
标准的回溯的问题,直接按行递归,就像八皇后的递归。
代码如下:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring> using namespace std; int n,k;
int map1[][];
int remi[],remj[];
int ans;
int cou; bool judge(int x,int y)
{
for(int i=;i<cou;++i)
if(remj[i]==y)
return ; return ;
} void dfs(int cur,int hang)
{
if(cur==k)
{
++ans;
return;
} for(int i=hang;i<=n;++i)
{
if(n-i+<k-cur)
break; for(int j=;j<=n;++j)
if(map1[i][j]&&judge(i,j))
{
remi[cou]=i;
remj[cou++]=j;
dfs(cur+,i+);
--cou;
}
}
} int main()
{
char c,s[]; ios::sync_with_stdio(false); for(cin>>n>>k;n!=-&&k!=-;cin>>n>>k)
{
ans=;
cou=;
for(int i=;i<=n;++i)
{
cin>>s; for(int j=;j<=n;++j)
{
c=s[j-];
if(c=='#')
map1[i][j]=;
else
map1[i][j]=;
}
} dfs(,); cout<<ans<<endl;
} return ;
}
最新文章
- 【iOS】彩色TabBar切换动画实现
- 公网IP映射修改后,原先的图片访问却不行了
- 变形--扭曲 skew()
- !important css样式
- 一些需要注意的C知识点
- 转:Spring中@Autowired注解、@Resource注解的区别
- 跨站脚本攻击(XSS)
- windows server 2003 负载平衡的详细设置步骤(转载)
- Salt安装
- struts2中根对象以及ognl .
- 设置input框文字垂直居中和宽度
- springboot情操陶冶-@ConfigurationProperties注解解析
- day 07
- python 逻辑判断 循环练习题
- C# CountdownEvent实现
- linux /Android 平台下使用 i2c-tools
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Django实战(6):对比RoR和Django的模板系统
- webstorm for ubuntu install
- NPOI创建Excel批注