题意:
人只能走黑色的瓷砖,求能走的最多瓷砖数
。:表示黑色的瓷砖
# :表示红色的瓷砖
@ :表示man
分析:
油田问题http://blog.csdn.net/cqlf__/article/details/6982693的简化版,真心简单的dfs,一次ac,哈哈。对于dfs是第一次啊。需要注意的问题是输入的数字第一个表示列第二个才是表示行,表示搞错一次。
下午做了2道,还有一个1649稍微难点,我用dfs写的在hdoj上过了,但是zoj上却悲剧的卡时间了。唉,下周做bfs吧,再去解决他。。。。>_<
#include<stdio.h>
int n,m,count;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char a[25][25];
int main()
{
void dfs(int x,int y);
int i,j;
int start_x,start_y;
while(scanf("%d%d",&m,&n)!=EOF)
{
count=1;
if(n==0&&m==0) break;
for(i=0;i<=n+1;i++)
{
a[i][0]='#';
a[i][m+1]='#';
}
for(j=0;j<=m+1;j++)
{
a[0][j]='#';
a[n+1][j]='#';
}
for(i=1;i<=n;i++)
{
getchar();
for(j=1;j<=m;j++)
{
scanf("%c",&a[i][j]);
if(a[i][j]=='@')
{
start_x=i;
start_y=j;
}
}
}
dfs(start_x,start_y);
printf("%d\n",count);
}
return 0;
}
void dfs(int x,int y)
{
int i;
if(a[x][y]=='#') return;
if(a[x][y]=='.') {count++;}
a[x][y]='#';
for(i=0;i<4;i++)
{
dfs(x+dir[i][0],y+dir[i][1]);
}
}