题目:http://poj.org/problem?id=1979
解题方法:深度优先算法
注意问题:字符输入时,回车键也会被当做有效字符输入,所以影响整体的输入。
解决方法:在scanf的一开始加上\n,其作用是刷新输入流的内容,保证之前留下的回车键不影响后面正确字符的输入。
代码如下:
<span style="font-size:18px;">#include<stdio.h>
const int HMAX = 20;
const int WMAX = 20;
char graph[HMAX][WMAX];
int H, W, is, js, res;
void init(){
res = 0;
scanf("%d%d", &W, &H);
//fflush(stdin);
for(int i = 0; i < H; i++){
for(int j = 0; j < W; j++){
scanf("\n%c", &graph[i][j]);
if( graph[i][j] == '@' ){
is = i;
js = j;
}
}
}
return ;
}
void dfs(int is, int js){
if( is < 0 || is >= H || js <0 || js >= W || graph[is][js] == '#' ) return;
graph[is][js] = '#';
res += 1;
dfs(is + 1, js);
dfs(is - 1, js);
dfs(is, js + 1);
dfs(is, js - 1);
return ;
}
int solve(){
dfs(is, js);
return res;
}
int main()
{
while(1){
init();
if( H == 0 && W == 0 ) break;
printf("%d\n", solve());
}
return 0;
}</span>