码迷,mamicode.com
首页 > 其他好文 > 详细

挑战程序2.1.4 穷竭搜索>>深度优先搜索

时间:2016-11-02 14:27:50      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:char   nbsp   sharp   std   color   例子   str   ret   sha   

{‘W‘,‘.‘,‘.‘,‘W‘,‘.‘},
{‘W‘,‘.‘,‘.‘,‘.‘,‘.‘},
{‘.‘,‘.‘,‘.‘,‘W‘,‘.‘},
{‘W‘,‘.‘,‘.‘,‘.‘,‘.‘},
{‘W‘,‘.‘,‘W‘,‘W‘,‘W‘}例子,此处有5处积水

  题目:有N*M格子的花园,W表示积水,‘.‘表示干地,积水附近8个区域只要有积水,那么这两处连通,并算作是同一处积水,问一共有几处积水?

    思路:穷竭搜索,O(N*M),搜索到积水则变成‘.’,并搜索连通的积水将其变成‘.’,直到这块积水搜索结束,此时a+=1,此处积水全变为‘.’

 1 #include <stdio.h>
 2 void dfs(int x,int y);
 3 void solve();
 4     int N=5,M=5;
 5         char ch[5][5]={
 6                         {W,.,.,W,.},
 7                         {W,.,.,.,.},
 8                         {.,.,.,W,.},
 9                         {W,.,.,.,.},
10                         {W,.,W,W,W}
11                       };
12 int main()
13 {
14 
15     solve();
16     return 0;
17 }
18 
19 void dfs(int x,int y)
20 {
21     ch[x][y]=.;
22     for(int x1=-1;x1<=1;x1++)
23         for(int y1=-1;y1<=1;y1++)
24     {
25         int nx=x+x1,ny=y+y1;
26         if(nx>=0&&nx<N&&ny>=0&&ny<M&&ch[nx][ny]==W)//nx,ny不能超出园子
27             dfs(nx,ny);
28     }
29     return ;
30 }
31 
32 void solve()
33 {
34     int a=0;
35     for(int i=0;i<N;i++)
36         for(int k=0;k<M;k++)
37         if(ch[i][k]==W)
38         {
39             dfs(i,k);
40             a++;
41         }
42     printf("%d\n",a);
43 }

此处演示5*5,5块积水的代码。

Tips:深度优先搜索DFS,从最开始出发,遍历所有可能性,对其进行操作或列举。

挑战程序2.1.4 穷竭搜索>>深度优先搜索

标签:char   nbsp   sharp   std   color   例子   str   ret   sha   

原文地址:http://www.cnblogs.com/cz476325514/p/6022512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!