noi2.5:迷宫问题(深搜+n车问题)

题目传送门

题目大意:

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;
} 

猜你喜欢

转载自blog.csdn.net/liusu201601/article/details/82465316
今日推荐