1. 程式人生 > 資訊 >小鵬汽車:將在兩年內推出針對國際市場的產品平臺

小鵬汽車:將在兩年內推出針對國際市場的產品平臺

題目描述
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);
	}
}