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

            POJ 3020 C++ (圖論)

            //用算法導(dǎo)論書(shū)上最大流做的二分圖匹配,所以內(nèi)存耗的比較大,因?yàn)樾枰?duì)列來(lái)存儲(chǔ)增廣路徑
            //一個(gè)數(shù)組沒(méi)有初始化,wrong了N次
            //很多人都是用匈牙利算法做的,偶也準(zhǔn)備學(xué)學(xué)傳說(shuō)中的匈牙利算法
            #include<iostream>
            using namespace std;
            int h,w,flag,res,node;
            int arr[500][500],map[50][20];
            int q
            [10000],pre[10000],used[500];
            int dx[]={-1,1,0,0};
            int dy[]={0,0,-1,1};
            int path(int s)  //尋找增廣路徑
            { int u,head,tail,temp,i,j;
              head=tail=0;
              q[tail++]=s;
              used[s]=1;
              while(head<tail)
                   { temp=tail;
                     for(i=head;i<temp;i++)
                         {    u=q[i];
                              if(u==1)
                                 return 1;
                              for(j=0;j<node;j++)
                                 if(used[j]==0 && arr[u][j]>0)
                                    {pre[j]=u;
                                     used[j]=1;
                                     q[tail++]=j;
                                     }
                          }
                      head=temp;
                   }
              return 0;      
            }

            void  ford_fulkerson() //修改增光路徑上邊的殘留容量,記錄匹配的結(jié)果
            { int i,j,u,v,min,x,y;
              min=INT_MAX;
              u=pre[1];
              v=1;
              while(u>=0)
                   {if(arr[u][v]<min)
                         min=arr[u][v];
                        v=u;
                        u=pre[u];
                   }

              u=pre[1];
              v=1;
              while(u>=0)
                   {   arr[u][v]=arr[u][v]-min;
                       arr[v][u]=arr[v][u]+min;
                       v=u;
                       u=pre[u];
                    }
               res=res+min;        
            }        

            int main()
            {int i,j,k,Case,x,y;
            char c;
                   freopen("in.txt","r",stdin);
                   freopen("out.txt","w",stdout);
                     scanf("%d",&Case);
                   while(Case--)  
                      { flag=0;
                        res=0;
                        node=2;
                      scanf("%d%d",&h,&w);
                      memset(map,0,sizeof(map));
                      memset(used,0,sizeof(used));
                      memset(arr,0,sizeof(arr));
                      for(i=0;i<h;i++)
                          {getchar();
                           for(j=0;j<w;j++)
                              { scanf("%c",&c);
                                if(c=='*')
                                  map[i][j]=node++;
                               }
                           }  
                       for(i=0;i<h;i++) //構(gòu)圖建模,抽象成二分圖匹配的問(wèn)題
                          for(j=0;j<w;j++)
                              { if(map[i][j] && !used[map[i][j]])
                                   {  arr[0][map[i][j]]=1;
                                      used[map[i][j]]=1;
                                      for(k=0;k<4;k++)
                                         { x=i+dx[k];
                                           y=j+dy[k];
                                           if(x>=0 && x<h && y>=0 && y<w && map[x][y])
                                           {arr[map[i][j]][map[x][y]]=1;
                                            arr[map[x][y]][1]=1;
                                            used[map[x][y]]=1;
                                           }
                                         }
                                   }
                              }          
                       while(!flag)
                         { memset(used,0,sizeof(used));
                           memset(pre,-1,sizeof(pre));
                           if(path(0))
                              ford_fulkerson();
                            else
                              flag=1;
                          }
                printf("%d\n",node-2-res);
              }  
               return 0;
            }    

            posted on 2008-11-29 11:06 蝸牛 閱讀(1414) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): ACM ICPC

            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)(20)

            隨筆檔案(20)

            Favorites

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久99国产精品久久久| 国产女人aaa级久久久级| 亚洲精品午夜国产VA久久成人| 午夜天堂av天堂久久久| 久久国产精品久久久| 欧美一区二区久久精品| 2021少妇久久久久久久久久| 久久青青草原亚洲av无码| 久久九九精品99国产精品| 欧美激情精品久久久久久久九九九| 精品国产99久久久久久麻豆| 精品久久久久久无码中文野结衣 | 久久久久亚洲av综合波多野结衣| 久久精品国产亚洲AV无码麻豆| 国产亚洲精午夜久久久久久 | 亚洲成色999久久网站| 欧美牲交A欧牲交aⅴ久久| 久久精品无码一区二区日韩AV| 久久久久高潮毛片免费全部播放| 四虎影视久久久免费观看| 国产一区二区精品久久岳| 中文字幕亚洲综合久久2| av午夜福利一片免费看久久| 麻豆一区二区99久久久久| 2019久久久高清456| 久久久久波多野结衣高潮| 午夜精品久久久内射近拍高清| 国产一区二区三精品久久久无广告 | 中文字幕精品久久| 久久久久国色AV免费看图片| 中文字幕一区二区三区久久网站| 久久亚洲国产精品一区二区| 国产精品国色综合久久| 国产情侣久久久久aⅴ免费| 国产午夜精品久久久久免费视| 亚洲精品乱码久久久久久蜜桃图片| 亚洲欧洲中文日韩久久AV乱码| 亚洲乱码日产精品a级毛片久久| 伊人久久精品影院| 久久精品国产亚洲AV影院| 色偷偷久久一区二区三区|