穷竭检索之深度遍历

深度遍历

 

题一、给定整数a1、a2、... 、an,判断是否可以从中选出若干数,使他们的和恰好为k。

     限制条件

  • 1<= n <= 20
  • -10^8 <= ai <=10^8
  • -10^8 <= k <=10^8

#include 
#include 

int n,k,a[22],b[22];

//深度遍历 
bool dfs(int i,int sum)
{
	if(i==n)
		return sum==k;
	b[i] == 0;//没加设值为0 
		
	if(dfs(i+1,sum))//值不想加遍历 
		return true;
		
	b[i] = 1;// 相加设值为1 
	
	
	if(dfs(i+1,sum+a[i]))//值相加遍历 
		return true;
	
	
	return false;
 } 
 
 int main(){
 	scanf("%d",&n);
 	scanf("%d",&k);
 	printf("请输入数值:");
 	
 	for(int i=0;i

 

 

题二、有一个大小为NxM的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通是指下图中相对W的*部分)

*  *  *

* W *

*  *  *

限制条件

  • N,M <= 100

样例输入:10  12

W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

样例输出:

3

#include 
#include 

int n,m;
char field[100][100];

void init()
{
	scanf("%d %d",&n,&m);
	for(int i=0;i=0 && nx=0 && field[nx][ny] =='W') dfs(nx,ny);
			//判断nx,ny是不是在园子内,以及是否有积水 
			
		}
	}
} 

void solve(){
    int res = 0;
    for(int i=0;i

 

 

你可能感兴趣的:(算法学习)