POJ - 1321 棋盘问题 解题报告

题目大意:

让你在一个n*n(n<=8)的棋盘中放k(k<n)个棋子,要求每个棋子都不能在同一行或者同一列 。然后你得输出对于每个棋盘有多少种摆放方式。类似于组合而不是排列。

#include
#include
#include
#include
#define N 10
using namespace std;
char map[N][N]={0};
bool vis[N][N]={0};
int n,k;
int s=0;
//bool viss[N][N]={0};

void input()
{
	char l;
	l=getchar();
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n+1;j++)
		{
			scanf("%c",&map[i][j]);
		}
	}
}

void dfs(int x,int y,int m)//从(x,y)开始搜索,并且该点为第m个 
{
	vis[x][y]=1;
	if(m==k)
	{
		s++;
		return;
	}
	for(int i=x+1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			//if(viss[i][j]==1)continue;
			if(vis[i][j]==1)continue;
			int flag=0;
			for(int h=1;h<=n;h++)
			{
				if(vis[h][j]==1||vis[i][h]==1)
				{
					flag=1;break;
				}
			}
			if(flag==1)continue;
			if(map[i][j]=='.')continue;
			//cout<>n>>k) { if(n==-1&&k==-1)break; s=0; input(); //ceshi1(); //memset(viss,0,sizeof(viss)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { memset(vis,0,sizeof(vis)); if(map[i][j]=='.')continue; dfs(i,j,1); //viss[i][j]=1; } } cout<

注:感觉搜索还是要反复熟悉代码。

全部评论

相关推荐

12-05 18:09
已编辑
广东药科大学 后端工程师
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务