版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/83832478
感觉有点入了DFS的门槛,距离完全掌握还差得远呢
AC代码:运行时间为7ms
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 26;
int vis[maxn][maxn],col,line,flag,count;
char map[maxn][maxn];
int xx[5]={0,-1,1,0,0};
int yy[5]={0,0,0,-1,1};
void dfs(int x,int y)
{
int i;
vis[x][y]=1;
for(i=1;i<=4;i++)
{
if(x+xx[i]>=0 && y+yy[i]>=0 && x+xx[i]<line && y+yy[i]<col && map[x+xx[i]][y+yy[i]]!='#' && !vis[x+xx[i]][y+yy[i]])
{
count++;
dfs(x+xx[i],y+yy[i]);
}
}
return;
}
int main ()
{
int T,i,j,m,n;
while(scanf("%d%d",&col,&line)==2 && col && line)
{
getchar();
count=1;
//先输入列,在输入行
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
for(i=0;i<line;i++)
{
for(j=0;j<col;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
m=i;n=j;
}
}
}
dfs(m,n);
printf("%d\n",count);
}
return 0;
}
修改后:运行时间4ms
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 26;
int vis[maxn][maxn],col,line,flag,count;
char map[maxn][maxn];
int xx[5]={0,-1,1,0,0};
int yy[5]={0,0,0,-1,1};
void dfs(int x,int y)
{
//先判断,在标记
if(x<0 || x>=line || y<0 || y>=col || map[x][y]=='#' || vis[x][y]==1) return ;
int i;
if(map[x][y]=='.')
{
vis[x][y]=1;
count++;
}
for(i=1;i<=4;i++)
{
dfs(x+xx[i],y+yy[i]);
}
return;
}
int main ()
{
int T,i,j,m,n;
while(scanf("%d%d",&col,&line)==2 && col && line)
{
getchar();
count=1;
//先输入列,在输入行
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
for(i=0;i<line;i++)
{
for(j=0;j<col;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
m=i;n=j;
}
}
}
dfs(m,n);
printf("%d\n",count);
}
return 0;
}