题目大意:
1、n车问题,就是在一个棋盘里,放n辆车,要求相互不ga干扰。n皇后问题的简单版;
解题思路:
1、又是比较元问题的题目;
2、加了一个障碍的设置,但是没什么意义;
3、如果我改这题,会改成,有障碍的话,车彼此不能吃,用来增加难度,不妨思考一下?
上代码
//noi2.5:323棋盘问题
//简评:八皇后的简化版本,车的摆放
//ps:#才是路
#include<cstdio>
char a[110][110];
bool l[110];//列的占位
int ans,n,k;
void dfs(int x,int t)//当前是x行,用剩 t 个棋子(列)
{
// printf("%d\n",t);
// for(int i=1;i<=n;i++) printf("%s\n",a[i]+1);
if(t==0) { ans++; return ; }//棋子全部放进去了
if(x>n) return ;//棋子没放完,但是棋盘试完了,放不下了
for(int y=1;y<=n;y++)//在本行找位置放
{
if(a[x][y]=='#'&&l[y]==0)
{
l[y]=1;
dfs(x+1,t-1);
l[y]=0;
}
}
dfs(x+1,t); //直接去下一行
}
int main()
{
while(1)
{
scanf("%d %d",&n,&k);
if(n==-1&&k==-1) break;
for(int i=1;i<=n;i++)//输入棋盘,.是可以走的,#不可以走
{
scanf("%s",a[i]+1);
}
for(int i=1;i<=n;i++) { l[i]=0; }//全部列是空的
ans=0;//计数器
dfs(1,k);//从第一行开始搜,有k个棋子可以落(只能落k行)
printf("%d\n",ans);
}
return 0;
}