深搜基础题目 杭电 HDU 1241

HDU 1241 是深搜算法的入门题目,递归实现。

原题目传送门: 

http://acm.hdu.edu.cn/showproblem.php?pid=1241

代码仅供参考,c++实现:

#include <iostream>

using namespace std;



char land[150][150];

int p,q;



void dfs(int x,int y){

    land[x][y] = '*';

    if(land[x-1][y]!= '@' && land[x+1][y] != '@' && land[x][y-1] != '@' && land[x][y+1] != '@' && land[x-1][y+1]!= '@' && land[x+1][y-1] != '@' && land[x-1][y-1] != '@' && land[x+1][y+1] != '@')

        return ;

    

    if(x+1 > 0 && y+1 > 0 && x+1 <= p && y+1 <= q && land[x+1][y+1]== '@') { dfs(x+1,y+1);  }

    if(x+1 > 0 && y-1 > 0 && x+1 <= p && y-1 <= q && land[x+1][y-1]== '@') { dfs(x+1,y-1);  }

    if(y-1 > 0 && x-1 > 0 && x-1 <= p && y-1 <= q && land[x-1][y-1]== '@') { dfs(x-1,y-1);  }

    if(y+1 > 0 && x-1 > 0 && x-1 <= p && y+1 <= q && land[x-1][y+1]== '@') { dfs(x-1,y+1);  }

    

    if(x+1 > 0 && y > 0 && x+1 <= p && y <= q && land[x+1][y]== '@') { dfs(x+1,y);  }

    if(x-1 > 0 && y > 0 && x-1 <= p && y <= q && land[x-1][y]== '@') { dfs(x-1,y);  }

    if(y-1 > 0 && x > 0 && x <= p && y-1 <= q && land[x][y-1]== '@') { dfs(x,y-1);  }

    if(y+1 > 0 && x > 0 && x <= p && y+1 <= q && land[x][y+1]== '@') { dfs(x,y+1);  }

   

    return ;

}

int main(int argc, const char * argv[]) {

    

    int num;

    cin>>p>>q;

    while(p>0 && q>0){

    

            num = 0;

            for(int i = 1; i <= p ;i++){

                for(int j = 1; j<= q; j++){

                    cin>>land[i][j];

                }

            }

            for(int i = 1; i <= p ;i++){

                for(int j = 1; j<= q; j++){

                    if(land[i][j] == '@'){

                        num++;

                        dfs(i,j);

                    }

                    

                }

            }

            cout<< num<<endl;

        cin>>p>>q;

    }

    return 0;

}

 

你可能感兴趣的:(杭电 hdu)