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

            pku 1419

            2009年8月9日

            題目鏈接:PKU 1419 Graph Coloring

            分類:DFS

            題目分析與算法原型
                     算法1:直接暴力搜索即可過,數(shù)據(jù)不強,實現(xiàn)默認(rèn)每個點為白色,然后從第一個點開始搜索,對于當(dāng)前的頂點,枚舉與他相鄰的點中是否有黑色,若沒有則將他染黑色,然后頂點編號加一,繼續(xù)搜索下一個,若與他相鄰的點中有已經(jīng)染黑的點,那么只能將當(dāng)前的點染成白色,然后繼續(xù)搜索,注意無論有沒有黑色的鄰點,對于當(dāng)前的點都要染白一次,搜索,因為對于白色是沒有限制的....
                    算法2:其實這是一道最大獨立集問題,對于該種問題可以通過將原圖求補,就可以變成求其補圖的最大團問題,通過最大團來求解
                   (PS:算法1->47ms,算法2->0ms)

            Code1: 

             1
            #include<stdio.h>
             2#include<string.h>
             3#define max 105
             4bool flag[max];
             5int map[max][max],t,n,k,color[max],count,pos[max],fp,black,cnt;//color數(shù)組:0表示白,1表示黑
             6void dfs(int num)
             7{
             8    int i;
             9    if(num==n)
            10    {
            11        int j;
            12        if(black>count)
            13        {   
            14            fp=0;
            15            count=black;
            16            for(j=1;j<=n;j++)if(color[j]==1)pos[fp++]=j;
            17        }

            18        return ;
            19    }

            20    for(i=1;i<=n;i++)
            21        if(i!=num&&map[num][i]==1&&color[i]==1)break;
            22    if(i>n)
            23    {
            24        color[num]=1;
            25        black++;
            26        dfs(num+1);
            27        color[num]=0;
            28        black--;
            29    }

            30    dfs(num+1);
            31}

            32int main()
            33{
            34    int i;
            35    scanf("%d",&t);
            36    while(t--)
            37    {
            38        memset(flag,false,sizeof(flag));
            39        memset(map,0,sizeof(map));
            40        memset(color,0,sizeof(color));
            41        scanf("%d%d",&n,&k);
            42        for(i=1;i<=k;i++)
            43        {
            44            int a,b;
            45            scanf("%d%d",&a,&b);
            46            map[a][b]=1;
            47            map[b][a]=1;
            48        }

            49        count=0;
            50        black=0;
            51        dfs(1);
            52        printf("%d\n",count);
            53        for(i=0;i<fp;i++)
            54        {
            55            printf("%d",pos[i]);
            56            if(i<fp-1)printf(" ");
            57            else printf("\n");
            58        }

            59    }

            60    return 1;
            61}

            62
            63
            Code2: 

             1
            #include<stdio.h>
             2#define len 105
             3int map[len][len],max,cnt[len],group[len],m,n,k;
             4bool dfs(int num,int visit[len],int pos)
             5{
             6    int i,j;
             7    for(i=num+1;i<=n;i++)
             8    {
             9        if(cnt[i]+pos<=max) return false;//根據(jù)cnt[]數(shù)組的非遞增性可以直接返回false
            10        if(map[num][i])
            11        {
            12            for(j=0;j<pos;j++)if(map[i][visit[j]]==0)break ;
            13            if(j==pos)  //與當(dāng)前完全圖的所有點都有邊,可以加進來
            14            {
            15               visit[pos]=i;
            16               if(dfs(i,visit,pos+1))return true;
            17            }

            18        }

            19    }

            20    if(pos>max)
            21    {
            22        int kk;
            23        for(kk=0;kk<pos;kk++)group[kk]=visit[kk];//更新最大完全圖的頂點集合
            24        max=pos;
            25        return true;//根據(jù)cnt[]數(shù)組的非遞增性可以直接返回true
            26    }

            27    return false;
            28}

            29void init()
            30{
            31    int i,j;
            32    for(i=1;i<=n;i++)
            33        for(j=1;j<=n;j++)
            34        {
            35            if(i!=j)map[i][j]=1;
            36            else map[i][j]=0;
            37        }

            38}

            39int main()
            40{
            41    int i,a,b,path[len];
            42    scanf("%d",&m);
            43    while(m--)
            44    {
            45        scanf("%d%d",&n,&k);
            46        init();
            47        for(i=1;i<=k;i++)
            48        {
            49            scanf("%d%d",&a,&b);
            50            map[a][b]=0;
            51            map[b][a]=0;
            52        }

            53
            54        max=-1;
            55        for(i=n;i>=1;i--)
            56        {
            57            path[0]=i;
            58            dfs(i,path,1);
            59            cnt[i]=max; 
            60        }

            61        printf("%d\n",cnt[1]);//打印出最大完全圖的頂點數(shù)
            62        for(i=0;i<cnt[1];i++)printf("%d ",group[i]);//打印出最大完全圖的頂點集合
            63        printf("\n");
            64    }

            65    return 1;
            66}

            posted on 2009-08-09 10:00 蝸牛也Coding 閱讀(334) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(8)

            隨筆檔案(78)

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久久无码精品亚洲日韩按摩| 日本精品久久久久中文字幕8| 国产成人精品综合久久久久| 亚洲αv久久久噜噜噜噜噜| 久久se精品一区精品二区| 婷婷久久精品国产| 久久久免费精品re6| 欧美性大战久久久久久| 韩国无遮挡三级久久| 久久中文字幕人妻丝袜| 国产午夜精品理论片久久 | 久久综合狠狠色综合伊人| 噜噜噜色噜噜噜久久| 91秦先生久久久久久久| 亚洲伊人久久精品影院| 亚洲人成网站999久久久综合| 精品国产乱码久久久久久郑州公司 | 97久久久久人妻精品专区| 久久受www免费人成_看片中文| 久久综合综合久久97色| 精品国产VA久久久久久久冰| 久久精品无码一区二区WWW| 久久青青草原精品国产软件 | 亚洲午夜无码AV毛片久久| 狠狠精品久久久无码中文字幕| 久久国产精品-久久精品| 久久久久成人精品无码中文字幕| 日韩久久无码免费毛片软件| 久久www免费人成精品香蕉| 欧美亚洲另类久久综合| 久久婷婷激情综合色综合俺也去 | 伊人色综合九久久天天蜜桃| 久久人人爽人爽人人爽av| 久久不见久久见免费影院www日本| 青青草国产精品久久| 91精品国产高清久久久久久国产嫩草 | 久久天天躁狠狠躁夜夜2020老熟妇| 久久精品视频网| 九九久久精品无码专区| 欧美久久久久久精选9999| 伊人色综合久久天天人守人婷|