您的位置:首页 > 其它

poj 1321 棋盘问题

2012-09-27 21:38 176 查看
题目连接:http://poj.org/problem?id=1321

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=9;
char map[MAX][MAX];
bool visit[MAX];
int k,n,count_q;
void dfs(int cur,int tot_q )        //cur 是第cur行,tot_q是已经放了多少只棋子了
{
if(tot_q==k)
{
count_q++;
return ;
}
if(cur>=n)
return ;
for(int i=0;i<n;i++)      //在第cur行中选一个位置
{
if(!visit[i]&&map[cur][i]=='#')
{
visit[i]=true;
dfs(cur+1,tot_q+1);
visit[i]=false;              //这个地方一定要把还原为false,递归跳到了上一层后相当于没有选上第 i 列
}
}
dfs(cur+1,tot_q);                //第cur行没有放棋子
}
int main()
{
cin>>n>>k;
while(n!=-1&&k!=-1)
{
count_q=0;
int i,j;
for(i=0;i<MAX+1;i++)
visit[i]=false;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>map[i][j];
}
}
dfs(0,0);
cout<<count_q<<endl;;
cin>>n>>k;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: