xtu_2008 搜索

来源:互联网 发布:淘宝未收到货显示签收 编辑:程序博客网 时间:2024/05/18 01:10

写代码时要尽可能地精简,否则就可能各种错误;不熟悉的东西尽量避免使用,否则就可能各种错误……比如下面的两个,第一个AC,第二个就RE了:

 

(差点误人误己)原来第一种写法是水过去的,因为其搜索顺序和第二个不一样,,,,,

 

#include<cstdio>//当用暴力代替dfs中的for循环时为什么会爆掉?#include<cstring>#include<cstdlib>#define M 751using namespace std;int T;char G[M][M];int W, H,    dx[8]={1,-1,0,0,1,-1,1,-1},    dy[8]={0,0,1,-1,1,1,-1,-1};void dfs(int x,int y){        if(x<0||x>=H||y<0||y>=W||G[x][y]=='*')return ;        G[x][y]='*';        T++;        for(int i=0;i<8;i++)            dfs(x+dx[i],y+dy[i]);}int main(){          int i,j,max;          while(scanf("%d %d",&W,&H)==2){                //fflush(stdin);                getchar();                for(i=0;i<H;i++)gets(G[i]);                for(T=max=i=0;i<H;i++){                    for(j=0;j<W;j++){                           dfs(i,j);                           if(T>max)max=T;                           T=0;                        }                }                printf("%d\n",max);          }    return 0;}


 

#include<cstdio>#include<cstring>#include<cstdlib>#define M 751using namespace std;int T,W,H;char G[M][M];const int NEG=-1,POS=1;void dfs(int x,int y){        if(x<0||x>=H||y<0||y>=W||G[x][y]=='*')return;             T++;             G[x][y]='*';             dfs(x,POS+y);//right             dfs(x,NEG+y);//left             //upward             dfs(NEG+x,y);             dfs(NEG+x,NEG+y);             dfs(NEG+x,POS+y);             //downward             dfs(POS+x,y);             dfs(POS+x,NEG+y);             dfs(POS+x,POS+y);}int main(){          int i,j,max;          while(scanf("%d %d",&W,&H)==2){                //fflush(stdin);                getchar();                for(i=0;i<H;i++)gets(G[i]);                for(T=max=i=0;i<H;i++){                    for(j=0;j<W;j++){                           dfs(i,j);                           if(T>max)max=T;                           T=0;                        }                }                printf("%d\n",max);          }    return 0;}


 

原创粉丝点击