您的位置:首页 > 其它

POJ 1321

2015-06-09 13:56 316 查看
#include<iostream>
#define MAXN 10
using namespace std;

char _m[MAXN][MAXN];
bool mark[MAXN];
int n;
void DFS(int row);
int k;
int ans;
int give_num();
int main()
{
//freopen("acm.acm","r",stdin);
int i;
int j;

while(cin>>n>>k)
{
ans = 0;
//    memset(mark,false,sizeof(mark));
for(i = 0; i < MAXN; ++ i)
{
mark[i] = false;
}
if(n == -1 && k == -1)
{
break;
}
for(i = 0; i < n; ++ i)
{
for(j = 0; j < n; ++ j)
{
cin>>_m[i][j];
}
}
if(k == 1)
{
cout<<give_num()<<endl;
continue;
}
for(i = 0; i < n; ++ i)
{
if(n-i < k)
{
break;
}
for(j = 0; j < n; ++ j)
{
if(_m[i][j] == '#')
{
mark[j] = true;
-- k;
DFS(i+1);
++ k;
mark[j] = false;
}
}
}
//    cout<<k<<" - "<<endl;
cout<<ans<<endl;
}
}

int give_num()
{
int i;
int j;
int sum = 0;
for(i = 0; i < n; ++ i)
{
for(j = 0; j < n; ++ j)
{
if(_m[i][j] == '#')
{
++ sum;
}
}
}
return sum;
}

void DFS(int row)
{
int i;
if(n - row < k)
{
return;
}
for(i = 0; i < n; ++ i)
{
if(_m[row][i] == '#' && !mark[i])
{
if(k - 1 == 0)
{
++ ans;
//    DFS(row+1);
continue;
}
-- k;
mark[i] = true;
DFS(row+1);
mark[i] = false;
++ k;
//        DFS(row+1);
}
}
//    if(k - 1 == 0)
{
DFS(row+1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: