• <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 閱讀(515) 評論(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);
            }  回復  更多評論
              
            中文无码久久精品| 亚洲中文字幕无码久久2020| 色综合久久综合网观看| 88久久精品无码一区二区毛片| 丁香五月综合久久激情| 国内精品伊人久久久久妇| 国产一久久香蕉国产线看观看 | 久久天天躁狠狠躁夜夜96流白浆| 久久大香香蕉国产| 亚洲Av无码国产情品久久| 久久99久久99精品免视看动漫| 久久精品国产清自在天天线| 少妇高潮惨叫久久久久久 | 久久国产精品成人免费| 亚洲欧美久久久久9999| 青草影院天堂男人久久| 久久久SS麻豆欧美国产日韩| 91久久精品国产91性色也| 久久久无码一区二区三区| 一级做a爰片久久毛片毛片| 成人久久精品一区二区三区| 中文字幕久久精品| 久久久久国产一区二区三区| 好属妞这里只有精品久久| 亚洲国产精品无码久久一区二区| 精品国产青草久久久久福利| 精品综合久久久久久97超人 | 日韩精品久久久久久久电影蜜臀| 欧美精品丝袜久久久中文字幕 | 久久99精品免费一区二区| 国产99久久九九精品无码| 国产欧美久久一区二区| 久久综合给久久狠狠97色| 性欧美大战久久久久久久久| 一本大道久久香蕉成人网| 久久成人国产精品一区二区| 国产精品免费久久| 久久精品国产精品亜洲毛片| 国产国产成人久久精品| 狠色狠色狠狠色综合久久| 久久综合九色综合精品|