还是DFS。。。。真好用的呢。。开这么大的规模的数组时间都不超过150MS。。。。。125MS过。可以剪枝的吗,觉得找不到剪枝的地方的呢。
在家里的最后一道题的了,很简单的一道题的呢,对DFS有比较初步的理解的了,砾哥说还有维护一个栈的DFS写法。。回学校了再研究的吧。
回学校了开始入门BFS,一样一样来的嘛,不着急。。
PS:这个农场可够大的。。。。。
#include<iostream>
using namespace std;
#define max 1001
char map[max][max];
int visited[max][max];
int add[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int col,row,max_size,count;
void DFS(int i,int j)
{ int k;
visited[i][j]=1;
for(k=0;k<4;k++){
if(!visited[i+add[k][0]][j+add[k][1]]&&map[i+add[k][0]][j+add[k][1]]=='*'){
count++;
DFS(i+add[k][0],j+add[k][1]);
}
}
}
int main()
{ int i,j;
while(scanf("%d%d",&col,&row)!=EOF&&row&&col){
max_size=0;
for(i=1;i<=row;i++)
for(j=1;j<=col;j++){
cin>>map[i][j];
visited[i][j]=0;
}
for(i=1;i<=row;i++)
for(j=1;j<=col;j++){
if(map[i][j]=='*'&&visited[i][j]==0){
count=1;
DFS(i,j);
//printf("count==%d\n",count);
if(max_size<count)
max_size=count;
}
}
printf("%d\n",max_size);
}
return 0;
}
using namespace std;
#define max 1001
char map[max][max];
int visited[max][max];
int add[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int col,row,max_size,count;
void DFS(int i,int j)
{ int k;
visited[i][j]=1;
for(k=0;k<4;k++){
if(!visited[i+add[k][0]][j+add[k][1]]&&map[i+add[k][0]][j+add[k][1]]=='*'){
count++;
DFS(i+add[k][0],j+add[k][1]);
}
}
}
int main()
{ int i,j;
while(scanf("%d%d",&col,&row)!=EOF&&row&&col){
max_size=0;
for(i=1;i<=row;i++)
for(j=1;j<=col;j++){
cin>>map[i][j];
visited[i][j]=0;
}
for(i=1;i<=row;i++)
for(j=1;j<=col;j++){
if(map[i][j]=='*'&&visited[i][j]==0){
count=1;
DFS(i,j);
//printf("count==%d\n",count);
if(max_size<count)
max_size=count;
}
}
printf("%d\n",max_size);
}
return 0;
}
在家里的最后一道题的了,很简单的一道题的呢,对DFS有比较初步的理解的了,砾哥说还有维护一个栈的DFS写法。。回学校了再研究的吧。
回学校了开始入门BFS,一样一样来的嘛,不着急。。
PS:这个农场可够大的。。。。。