标签:
Input
Output
Sample Input
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1
Sample Output
2
1
由于数据很小,直接DFS便好!
//Asimple
#include <iostream>
#include <string.h>
using namespace std;
int n, T, num, cnt, p;
char Map[10][10];
int vis[10];//记录同一列是否有过棋子
using namespace std;
void DFS(int k)
{
if( num == p )
{
cnt ++ ;
return ;
}
if( k >= n ) return ;//边界
for( int i=0; i<n; i++)
{
if(!vis[i] && Map[k][i]==‘#‘)
{
vis[i] = 1 ;
num ++ ;
DFS(k+1);
num -- ;
vis[i] = 0 ;
}
}
DFS(k+1);
}
int main()
{
while( cin >> n >> p )
{
if( n == -1 && p == -1 ) break ;
for (int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin >> Map[i][j] ;
memset(vis,0,sizeof(vis));
cnt = 0 ;
num = 0 ;
DFS(0);
cout << cnt << endl ;
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/Asimple/p/5528323.html