• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            心如止水
            Je n'ai pas le temps
            posts - 400,comments - 130,trackbacks - 0

            這是一道不能再簡單的題目了,我的做法是bfs,其實這題可以bfs可以dfs,隨便,看愛好了(floodfill其實和bfs差不多)。

            這道題雖然很簡單,但很慚愧,我交了很多次……

            第一次,低級錯誤,把一次bfs放在內層循環外面了~

            第二次,第十個數據WA;

            第三次,忘記把用來調試的代碼刪掉,超囧~!

            第四次,把第三次的代碼上面的部分代碼刪掉,AC。

             

            但是我其中還是犯了一個不小的錯誤,雖然僥幸AC了。我用used[i][j]把每次出隊的點標記,但是這樣有了重復現象,我開了一個10000的隊列結果內存不夠用。后來改正了一下,不使用used[i][j]=01,而是把入隊的點從“#”改為“-”,這樣一來在條件中判斷一下就可以避免重復了。

            感覺這個錯誤也挺低級,以前bfs的時候都沒有這個錯誤……唉,搜索還是需要加強啊。

            不過這個錯誤也對我有了一個提醒,在競賽內存允許的情況下多開內存還是可以避免一些不必要的錯誤的,比如這題,開60000的隊列,我的錯誤方法完全沒有問題。

            不多說,現在練習中出的錯也是一種積累吧。

            給出代碼,自然沒有dfs簡短了。

            #include<stdio.h>
            #define size 10000
            struct
            {
                
            long x[size],y[size],front,rear,count;
            }
            q;
            void clear()
            {
                q.count
            =0;
                q.front
            =0;
                q.rear
            =-1;
            }

            void put(long a,long b)
            {
                q.count
            ++;
                q.rear
            ++;
                q.x[q.rear]
            =a;
                q.y[q.rear]
            =b;
            }

            void get(long *a,long *b)
            {
                q.count
            --;
                
            *a=q.x[q.front];
                
            *b=q.y[q.front];
                q.front
            ++;
            }

            int empty()
            {
                
            return (q.count==0);
            }

            int main()
            {
                clear();
                
            long n,m,i,j,k,t1,t2,ans,sign;
                
            long xd[]={-1,-1,0,1,1,1,0,-1,-2,0,2,0};
                
            long yd[]={0,1,1,1,0,-1,-1,-1,0,2,0,-2};
                
            char map[101][101]={0};
                scanf(
            "%ld%ld",&n,&m);
                
            for(i=1;i<=n;i++)
                
            {
                   scanf(
            "\n");
                   
            for(j=1;j<=m;j++)
                     scanf(
            "%c",&map[i][j]);
                }

                ans
            =0;
                
            for(i=1;i<=n;i++)
                  
            for(j=1;j<=m;j++)
                    
            if(map[i][j]=='#')
                    
            {
                       put(i,j);
                       map[i][j]
            ='-';
                       
            while(!empty())
                       
            {
                          
            get(&t1,&t2);
                          
            for(k=0;k<12;k++)
                            
            if(t1+xd[k]>=1&&t1+xd[k]<=n&&t2+xd[k]>=1&&t2+xd[k]<=m&&map[t1+xd[k]][t2+yd[k]]=='#')
                            
            {
                               put(t1
            +xd[k],t2+yd[k]);
                               map[t1
            +xd[k]][t2+yd[k]]='-';
                            }

                       }

                       ans
            ++;
                    }

                printf(
            "%ld\n",ans);
                getchar();getchar();
            return 0;
            }

            posted on 2010-01-06 19:34 lee1r 閱讀(512) 評論(1)  編輯 收藏 引用 所屬分類: 題目分類:搜索

            FeedBack:
            # re: vijos P1051 送給圣誕夜的極光
            2015-07-15 18:00 | 王康
            #include<iostream>
            #include<cstdio>
            #include<cstdlib>
            #include<cmath>
            #include<ctime>
            #include<algorithm>
            #include<iomanip>
            using namespace std;
            int n,m,s=0,map[105][105],t,h,dl[1000][2];
            int dx[12]={0,0,0,0,1,1,1,-2,-1,-1,-1,2},
            dy[12]={2,1,-1,-2,1,-1,0,0,0,-1,1,0};
            void bfs(int x,int y)
            {
            s++;h=0;t=1;
            dl[1][0]=x;
            dl[1][1]=y;
            while(h<t)
            {
            h++;
            for(int i=0;i<12;i++)
            {
            if(dl[h][0]+dx[i]>=0&&dl[h][0]+dx[i]<m&&dl[h][1]+dy[i]>=0&&dl[h][1]+dy[i]<n&&map[dl[h][0]+dx[i]][dy[i]+dl[h][1]]==1)
            {
            t++;
            dl[t][0]=dl[h][0]+dx[i];
            dl[t][1]=dl[h][1]+dy[i];
            map[dl[h][0]+dx[i]][dl[h][1]+dy[i]]=0;
            }
            }
            }
            }
            int main()
            {
            char c[104];
            scanf("%d%d",&m,&n);
            for(int i=0;i<m;i++)
            {
            scanf("%s",c);
            for(int j=0;j<n;j++)
            if(c[j]=='#') map[i][j]=1;
            }
            for(int i=0;i<=m;i++)
            for(int j=0;j<=n;j++)
            if(map[i][j]==1) bfs(i,j);
            printf("%d",s);
            while(1);
            }  回復  更多評論
              
            国产亚洲成人久久| 成人资源影音先锋久久资源网| 国产视频久久| 国产一区二区三区久久精品| 久久精品成人国产午夜| 久久精品不卡| 久久久久久国产精品美女| 香蕉久久av一区二区三区| av无码久久久久久不卡网站| 大香网伊人久久综合网2020| 久久久久久久综合狠狠综合| A狠狠久久蜜臀婷色中文网| 久久精品成人免费观看97| 色狠狠久久AV五月综合| 精品国产热久久久福利| 久久综合综合久久综合| 亚洲欧洲中文日韩久久AV乱码| 久久99亚洲网美利坚合众国| 欧美日韩中文字幕久久久不卡| 狠狠色狠狠色综合久久| 久久国产香蕉视频| 久久se精品一区精品二区| 久久人妻无码中文字幕| 色诱久久av| 91麻豆精品国产91久久久久久| 天天爽天天狠久久久综合麻豆| 精品欧美一区二区三区久久久| 精品蜜臀久久久久99网站| 久久国产AVJUST麻豆| 国产精自产拍久久久久久蜜| 久久91精品国产91久久户| 国产亚洲精品久久久久秋霞| 久久一区二区三区免费| 精品久久久久久国产三级| 久久综合狠狠色综合伊人| 精品乱码久久久久久久| 精品久久久久久亚洲精品| 久久人人爽人人爽人人片AV东京热 | 亚洲精品国产综合久久一线| 久久99久久成人免费播放| 久久精品国产精品亜洲毛片|