深度搜索时,如何抽象结点,如何避免重复,如何搜到所有满足条件的集合。
可能因题目的不同而方法也不同,这个很考验知识面掌握程度啊。
这题完全参考网上的做法。
阅读(11) | 评论(0) | 转发(0) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
可能因题目的不同而方法也不同,这个很考验知识面掌握程度啊。
这题完全参考网上的做法。
点击(此处)折叠或打开
- #include <iostream>
- #include<stdio.h>
- #include <cstring>
-
- using namespace std;
-
- #define MAX_V (8+1)
-
- int n,k;
-
- char flag[MAX_V][MAX_V];
- char visitj[MAX_V];
-
- int status = 0;
- int dfs(int row,int l)
- {
- if( l == 0)
- {
- status++;
- return 0;
- }
- if(row > n)
- return 0;
-
-
- for(int j=1;j<=n;j++)
- {
-
-
- if(flag[row][j] == 1 && visitj[j] == 0)
- {
- visitj[j]=1;
- dfs(row+1,l-1);
- visitj[j]=0;
- }
- }
-
- dfs(row+1,l);
-
- return 0;
- }
-
- int main()
- {
- while(cin>>n>>k)
- {
- if(n == -1)
- break;
-
- memset(flag,0,sizeof(flag));
- memset(visitj,0,sizeof(visitj));
- status=0;
-
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- {
- char c;
- cin>>c;
- if(c == '#')
- flag[i][j]=1;
- }
-
- dfs(1,k);
- cout<<status<<endl;
- }
- }
相关热门文章
给主人留下些什么吧!~~
评论热议