您的位置:首页 > 其它

棋盘问题(dfs)

2018-03-29 21:01 211 查看


#include<stdio.h>
#include<string.h>
char a[10][10],vis[10];
int sum,n,m,qum;
void dfs(int i)
{
int j;
if(qum==m)
{
sum++;
return;/*返回(在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。
但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。)*/
}
if(i>n)
{
return;//越界
}
else
{
for(j=0;j<n;j++)
{
if(vis[j]==0&&a[i][j]=='#')
{
vis[j]=1;//标记该列
qum++;
dfs(i+1);//搜索下一行
qum--;
vis[j]=0;
}
}
dfs(i+1);//该行没有棋子
}
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(vis,0,sizeof(vis));
if(n==-1&&m==-1) break;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf(" %c",&a[i][j]);
}
}
qum=sum=0;
dfs(0);
printf("%d\n",sum);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  df