棋盘问题

题目描述
PIPI有一个n*n的棋盘,以及k个棋子,它想把这些棋子摆放到棋盘中去。 同一行同一列只能摆放一颗棋子。
但是棋盘中有些格子是不能摆放棋子的,它想问你一共有多少不同种的摆放方式?
两种摆放方式至少有一颗棋子摆放位置不同时视为不同摆放方式。

‘#’表示可以摆放棋子
‘.’表示不能摆放棋子
输入
多组测试数据
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
输出
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

include<stdio.h>

include<stdlib.h>

include<string.h>

include<stdbool.h>

  bool col_visited[10];
int ways;
int n, k;
char ch[10][10];

void DFS(int row,int chess_num)
{
	if (row == n || chess_num == 0) {
		if (chess_num == 0)ways++;
		return;
	}
	for (int i = 0; i < n; i++) {
		if (!col_visited[i] && ch[row][i] == ‘#‘) {
			col_visited[i] = true;
			DFS(row + 1, chess_num - 1);
			col_visited[i] = false;
		}
	
	}
	DFS(row + 1, chess_num);
}

int main()
{


	while ((scanf("%d %d", &n, &k)) != EOF)
	{


		for (int i = 0; i < n; i++) {
			scanf("%s", ch[i]);
		}
		ways = 0;
		for (int i = 0; i < 10; i++)col_visited[i] = false;
		DFS(0, k);
		printf("%d\n", ways);
	}
}

棋盘问题

上一篇:go goroutine 怎样更好的进行错误处理


下一篇:自定义 RedisTemplate