HDU 1312 Red and Black

题目连接: Red and Black

解题思路:记录好访问过点的状态,再去访问其他的点,记录图的时候要注意换行符。

 

#include<stdio.h>
#include<string.h>
#define MAX 25

int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
int v[MAX][MAX], tot, w, h;
char map[MAX][MAX];

void DFS(int x, int y){
	int i;
	if(v[x][y] || map[x][y] == '#' || x < 1 || y < 1 || x > h || y > w){
		return;
	}
	v[x][y] = 1;
	for(i = 0; i < 4; i++){
		DFS(x + dir[i][0], y + dir[i][1]);
	}
	tot++;
} 

int main(){
	int i, j, k, x, y;
	while(scanf("%d%d", &w, &h) && w && h){
		getchar();
		tot = 0;
		memset(v, 0, sizeof(v));
		
		for(i = 1; i <= h; i++){
			for(j = 1; j <= w; j++){
				scanf("%c", &map[i][j]);
				if(map[i][j] == '@'){
					x = i;
					y = j;
				}
			}
			getchar(); 
		}
		DFS(x, y);
		printf("%d\n", tot);
	}
	return 0;
}


 

你可能感兴趣的:(深度优先搜索)