• <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 閱讀(513) 評論(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);
            }  回復  更多評論
              
            欧美午夜A∨大片久久 | 国产精品久久久久久| 99久久精品午夜一区二区| 成人亚洲欧美久久久久| 亚洲精品久久久www| 无码人妻少妇久久中文字幕蜜桃| 久久99国产精品尤物| 久久精品免费网站网| 久久人妻AV中文字幕| 国产精品视频久久久| 噜噜噜色噜噜噜久久| 91久久精品视频| 亚洲精品国产字幕久久不卡| 国产福利电影一区二区三区久久老子无码午夜伦不 | 99久久国语露脸精品国产| 久久久久亚洲av成人无码电影| 国产亚洲精久久久久久无码77777| 亚洲天堂久久精品| 国产激情久久久久久熟女老人 | 久久亚洲国产成人影院网站| 久久精品水蜜桃av综合天堂| 久久精品国产亚洲AV不卡| 久久国产视频99电影| 99久久精品午夜一区二区| 亚洲精品国产字幕久久不卡| 久久夜色精品国产亚洲av| 久久久91精品国产一区二区三区| 亚洲精品无码久久一线| 亚洲精品乱码久久久久久蜜桃 | 亚洲国产精品无码久久久不卡 | 久久久久99精品成人片试看| 久久综合亚洲鲁鲁五月天| 久久综合视频网站| 久久精品国产精品亚洲人人| 一本大道加勒比久久综合| 久久精品国产91久久麻豆自制 | 日本精品久久久久中文字幕8 | 久久久久青草线蕉综合超碰| 久久亚洲国产最新网站| 久久夜色精品国产噜噜亚洲a| 欧美久久综合九色综合|