[关闭]
@cycn 2017-09-22T02:05:07.000000Z 字数 612 阅读 759

搜索的专题

题解

题目
链接: https://vjudge.net/contest/65959#overview

A - 棋盘问题 POJ - 1321**
题目的意思:

题目的思路:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. char a[10][10]; //记录棋盘位置
  6. int book[10]; //记录一列是否已经放过棋子
  7. int n,k;
  8. int total,m; //total 是放棋子的方案数 ,m是已放入棋盘的棋子数目
  9. void DFS(int cur)
  10. {
  11. if(k==m)
  12. {
  13. total++;
  14. return ;
  15. }
  16. if(cur>=n) //边界
  17. return ;
  18. for(int j=0; j<n; j++)
  19. if(book[j]==0 && a[cur][j]=='#') //判断条件
  20. {
  21. book[j]=1; //标记
  22. m++;
  23. DFS(cur+1);
  24. book[j]=0; //改回来方便下一行的判断
  25. m--;
  26. }
  27. DFS(cur+1); //到下一行
  28. }
  29. int main()
  30. {
  31. int i,j;
  32. while(scanf("%d%d",&n,&k)&&n!=-1&&k!=-1) //限制条件
  33. {
  34. total=0;
  35. m=0;
  36. for(i=0; i<n; i++)
  37. scanf("%s",&a[i]);
  38. memset(book,0,sizeof(book));
  39. DFS(0);
  40. printf("%d\n",total);
  41. }
  42. return 0;
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注