• <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>

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            pku 3620簡單搜索

            Posted on 2010-08-10 16:49 Onway 閱讀(376) 評論(0)  編輯 收藏 引用 所屬分類: 傷不起的ACM
             

            pku 3620簡單搜索

             

            題意:在一塊地里面,干燥的點標記為0,潮濕的點標記為1;求相連的1的最大個數。

             

            由于自己對搜索不太熟悉,當時以為是記憶化搜索,后來用dfs和bfs各寫了一次后,感覺就是一純粹的搜索而已。

            我到目前也還覺得,記憶化搜索是DP的一類,搜索過的地方,記錄下來,是要多次用到的。而這個題的搜索,只需簡單的標記一下搜索過的地方,以便不會再搜,而對已搜索的地方進行標記是搜索題的一個共性吧?

             

            當時寫dfs多開了一個數組進行標記,后來看了一下別人的代碼,看到標記數組都不用開,直接在原數組進行標記就得。這樣我才開始思考,記憶化搜索與簡單搜索的不同,記憶化搜索由于要用到搜索過的地方,直接用原數組進行了標記,就無法記錄(也不能太絕對,可能有些情況用記錄值也可以達到標記的效果,這個題貌似也可以,但可能就比較麻煩)。

            這個題目用原數組進行標記的話,就要開一個變量統計每一輪搜索的最大值。但這種方法確實是好。

             

            然后用bfs來寫的話,就要用到一個隊列。當時自己寫一個隊列類,調了N久才發現自己錯在一個很低級的理解錯誤上。我定義一個類,類里面有靜態成員,我的目的就是想讓靜態數據成員進行記錄隊列長度。然后又將類像鏈表結構體一樣進行動態分配進行鏈接,還以為那個靜態成員依然是原來那個。

             

            寫出來后發現有很大浪費,主要是由于指針指向沒有認真分析,然后穩健性也非常不好。

            干脆用STL的queue算了。

            然后又沒有注意同一個點進行了多次進隊,WA一次。

             

            //    dfs
            /*
                 
            #include <iostream>
            using namespace std;
            int data[101][101],n,m;
            bool sgn[101][101];
            int main()
            {
                int dfs(int,int);
                int k,i,j,r,c,ans=0;
                memset(data,0,sizeof(data));
                memset(sgn,0,sizeof(sgn));
                scanf("%d%d%d",&n,&m,&k);
                for(i=1;i<=k;++i)
                {
                    scanf("%d%d",&r,&c);
                    data[r][c]=1;
                }
                for(i=1;i<=n;++i)
                    for(j=1;j<=m;++j)
                    {
                            dfs(i,j);
                            ans=ans>data[i][j]?ans:data[i][j];
                    }
                printf("%d\n",ans);
            }
            int dfs(int i,int j)
            {
                if(sgn[i][j])    return 0;
                if(data[i][j]!=1)    return data[i][j];
                sgn[i][j]=1;
                return data[i][j]+=dfs(i-1,j)+dfs(i,j+1)+dfs(i+1,j)+dfs(i,j-1);
            }
            */



            //bfs
            /*

            #include <iostream>
            #include <queue>
            using namespace std;
            int data[101][101],n,m,num;
            struct point
            {
                int x;int y;
            };
            queue<point> myq;
            point conver(int a,int b)
            {
                point f;f.x=a;f.y=b;return f;
            }
            void bfs()
            {
                point s;
                while(!myq.empty())
                {
                    s=myq.front();
                    myq.pop();
                    if(data[s.x+1][s.y]==1)        {myq.push(conver(s.x+1,s.y));data[s.x+1][s.y]=0;}
                    if(data[s.x][s.y+1]==1)        {myq.push(conver(s.x,s.y+1));data[s.x][s.y+1]=0;}
                    if(data[s.x-1][s.y]==1)        {myq.push(conver(s.x-1,s.y));data[s.x-1][s.y]=0;}
                    if(data[s.x][s.y-1]==1)        {myq.push(conver(s.x,s.y-1));data[s.x][s.y-1]=0;}
                    ++num;
                }    
            }
            int main()
            {
                int k,i,j,r,c,max=0;
                scanf("%d%d%d",&n,&m,&k);
                memset(data,0,sizeof(data));
                for(i=1;i<=k;++i)
                {
                    scanf("%d%d",&r,&c);
                    data[r][c]=1;
                }
                for(i=1;i<=n;++i)
                    for(j=1;j<=n;++j)
                        if(data[i][j]==1)
                        {
                            data[i][j]=0;
                            myq.push(conver(i,j));
                            num=0;
                            bfs();
                            if(num>max)    max=num;
                        }
                printf("%d\n",max);
                return 0;
            }


            */
            久久久无码人妻精品无码| 久久亚洲色一区二区三区| 国产精品国色综合久久| 久久青青草原综合伊人| 久久97久久97精品免视看秋霞| 午夜精品久久久久成人| 久久精品亚洲日本波多野结衣| 久久狠狠一本精品综合网| 亚洲午夜无码AV毛片久久| 97久久超碰国产精品旧版| 欧洲性大片xxxxx久久久| 久久久精品国产sm调教网站| 午夜精品久久久内射近拍高清| 精品人妻久久久久久888| 亚洲а∨天堂久久精品9966| 色综合合久久天天综合绕视看 | 亚洲国产精品无码久久久蜜芽| 国产成人综合久久综合| 国产精品亚洲综合久久| 国产叼嘿久久精品久久| 久久精品国产福利国产秒| 免费无码国产欧美久久18| 久久免费观看视频| 久久久无码精品午夜| 超级碰久久免费公开视频| 久久不见久久见免费视频7| 久久人人爽人人爽人人爽| 久久久久97国产精华液好用吗| 欧美精品一区二区精品久久| 2021久久精品国产99国产精品 | 9191精品国产免费久久| 久久久久高潮毛片免费全部播放| 国产色综合久久无码有码| 麻豆久久久9性大片| 中文精品久久久久人妻| 亚洲国产婷婷香蕉久久久久久| 国产精品永久久久久久久久久 | 国产99久久久国产精品~~牛| 久久亚洲国产精品一区二区| 亚洲国产二区三区久久| 国产精品欧美久久久久无广告|