题目:
题意:
给出一张图,图上面有黑砖"."与红砖“#”与初始点“@”,只能经过黑砖与初始点而不能经过红砖,问在这张图如何走,才能走的最多黑砖。
分析:
直接从初始点“@”开始DFS,然后每次所走的路线记录最多黑砖数量,然后在输出就行了。要注意初始点也是黑砖,也要记录。
代码:
#include<cstdio>
using namespace std;
int n,m,sum;
char s[1010][1010];
void bfs(int x,int y){
if (x<1 || x>n || y<1 || y>m) return;
if (s[x][y]=='.' || s[x][y]=='@') sum++;
else return;
s[x][y]='#';
bfs(x-1,y);
bfs(x+1,y);
bfs(x,y-1);
bfs(x,y+1);
}
int main(){
int a,b;
while (1){
sum=0;
scanf("%d %d",&m,&n);
if (n==0 && m==0) break;
scanf("\n");
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
scanf("%c",&s[i][j]);
if (s[i][j]=='@'){
a=i;
b=j;
}
}
if (i!=n) scanf("\n");
}
bfs(a,b);
printf("%d\n",sum);
}
}