集训 Poj 1979

来源:互联网 发布:webshell是什么 编辑:程序博客网 时间:2024/05/16 14:05

题意:一个地图,求从起点开始,可以到达的点的个数,其中有墙阻隔,默认有边界。

题解:DFS,从起点开始,先替换这个点使之成为墙,然后四个方向进行搜索,知道没有点为止。

注意:在输入地图时,应该注意加一个为止存放’\n’,所以第二层for要+1宽度;还有在输入地图规格时候注意加上getchar,以免后面混乱
(当输入的是数字地图时候,不需要加宽)

#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#define pr(x) cout<<#x<<" "<<x;#define pl(x) cout<<#x<<" "<<x<<endl;using namespace std;char maze[30][30];int ans=0;int dx[] = {0,0,-1,1};int dy[] = {-1,1,0,0};int H,L;void dfs(int x,int y){    maze[x][y]='#';    ans++;    for(int i = 0; i<4; i++){        int nx = x + dx[i];        int ny = y + dy[i];    //    pl(maze[nx][ny]);        if(nx<L&&nx>=0&&ny<H&&ny>=0&&maze[nx][ny]=='.')            {                dfs(nx,ny);            }    }}int main(){    while(1){       int x,y;       scanf("%d %d",&L,&H);       getchar();       if(H==0){return 0;}       for(int i = 0; i<H; i++){        for(int j = 0; j<L+1; j++){            scanf("%c",&maze[j][i]);            if(maze[j][i]=='@'){                x=j;                y=i;            }        }       }       dfs(x,y);       printf("%d\n",ans);       ans=0;    }}
0 0
原创粉丝点击