POJ 1321-棋盘问题 简单搜索DFS

#include                  //POJ 1321-棋盘问题 简单搜索DFS  
#include            //   http://acm.pku.edu.cn/JudgeOnline/problem?id=1321
char c[10][10];                       
int f,ans,vis[20],n,k;
void dfs(int m,int i)
{
int nn,l,ii;
//printf("dffvcfb %d %d\n",m+1,i+1);
if(vis[i]==1) return;                 //vis[i]为当前列数标记
f++,vis[i]=1;                          //f为已摆放棋子个数
if(f==k)
{
//printf("dffvcfb\n");
ans++,f--,vis[i]=0;
return;
}
for(nn=m+1;nn {
l=strlen(c[nn]);
for(ii=0;ii if(c[nn][ii]=='#') dfs(nn,ii);
}
f--;
vis[i]=0;    // 没这个  wa了几次 ~~                
return;
}
int main()
{
int m,l,i;
while(~scanf("%d%d",&n,&k))             //n为行列数,k为需摆放棋子个数
{
if(n==-1||k==-1) break;
ans=0,f=0;
memset(c,0,sizeof(c));
memset(vis,0,sizeof(vis));
getchar();
for(m=0;m gets(c[m]);        //存数据
for(m=0;m {
l=strlen(c[m]);
for(i=0;i if(c[m][i]=='#')
{
//printf("%d\n",m+1);
dfs(m,i);
memset(vis,0,sizeof(vis));
}
}
printf("%d\n",ans);
}
}
/*
2 1
#.
.#
4 3
#..#
..#.
.#..
#..#
4 2
...#
.##.
.#..
##.#
4 2
...#
..#.
.#..
#...
4 2
...#
.#..
.#..
#...
4 2
....
....
.#..
#...
2 2
##
##
3 2
###
.##
###
-1 -1
*/

你可能感兴趣的:(ACM,菜鸟)