<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 147  文章 - 71  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類(146)

    隨筆檔案(147)

    文章分類(28)

    文章檔案(28)

    喜歡的Blog

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    http://acm.pku.edu.cn/JudgeOnline/problem?id=1129
    【題意簡述】信道分配。給定一個無向圖,為每頂點填上顏色,要求滿足相鄰的頂點顏色不同,問最少的顏色數是多少?
    【分析】利用四色定理,直接枚舉顏色數+DFS,其中DFS是暴力枚舉每個頂的顏色,以便找到一個可行解。
    import java.util.*;
    import java.io.*;

    public class poj_1129{
        
        
    public static int[][] g=new int[26][26];
        
        
    public static int solve(int n){
            
    int i,j,cnum;
            
    boolean tag=true;
            
    // 無邊圖只用1色即可
            for(i=0;i<&& tag;i++){
                
    for(j=i+1;j<&& tag;j++){
                    
    if(g[i][j]==1
                        tag
    =false;
                }

               }

            
    if(tag) 
                
    return 1;
            
            
    for(cnum=2;cnum<=4;cnum++)    // 枚舉答案+dfs
            {
                
    int[] x=new int[n];
                Arrays.fill(x,
    -1);
                
    if(DFS(x,0,cnum,n)) 
                    
    return cnum;
            }

            
    return -1;
        }

        
        
    //DFS的復雜度是顏色數^頂點數(4^26,其中可行性剪枝剪掉了很多分支) 
        public static boolean DFS(int[] x,int vnum, int cnum,int n){
            
    if(vnum == n) return true;    // v的頂點都上色,可行解
            for(int i=0;i<cnum;i++){    // 如果某個頂點沒有顏色填,返回上一層
                x[vnum] = i;
                
    if(check(vnum,x,i,n))         
                    
    if(DFS(x,vnum+1,cnum,n)) // 合法,枚舉下一個頂點
                        return true;
            }

            
    return false;
        }


        
    // 判斷相鄰的頂點是否有涂過這種顏色
        public static boolean check(int vnum,int[] x,int t,int n){
            
    boolean find=true;
            
    for(int i=0;i<&& find;i++){
                
    if(g[vnum][i]==1 && x[i]==t)
                    find
    =false;
            }

            
    return find;
        }

        
        
    public static void main(String rgs[]) throws Exception
        
    {  
            Scanner cin 
    = new Scanner(new BufferedInputStream(System.in));
            
    int i,j,n=cin.nextInt();
            
    while(n!=0){            
                
    for(i=0;i<n;i++)
                    Arrays.fill(g[i],
    0);        
                
    for(i=0;i<n;i++){
                    String s 
    = cin.next();
                    
    for(j=2;j<s.length();j++)
                        g[i][s.charAt(j)
    -'A']=1;
                }

                
    int count=solve(n);
                
    if(count==1)
                    System.out.println(count
    +" channel needed.");
                
    else
                    System.out.println(count
    +" channels needed.");
                n
    =cin.nextInt();
            }

        }

    }
    posted on 2009-09-10 15:21 飛翔天使 閱讀(866) 評論(1)  編輯  收藏 所屬分類: poj

    FeedBack:
    # re: poj1129(Channel Allocation) 2012-05-09 15:36 11
    DFS(x,1,cnum,n)//應該這樣吧?  回復  更多評論
      
    主站蜘蛛池模板: 激情小说亚洲色图| 中文字幕免费在线播放| 深夜国产福利99亚洲视频| 热久久这里是精品6免费观看| 亚洲免费观看视频| 免费在线观看一级片| 亚洲日产乱码一二三区别| 亚洲国产婷婷综合在线精品| 污污网站免费观看| 亚洲AV无码一区二区三区牲色| 国产成人精品日本亚洲专区| 18以下岁毛片在免费播放| 真人无码作爱免费视频| 久久亚洲AV午夜福利精品一区 | 久久国产乱子精品免费女| 亚洲国产精品久久丫| 亚洲精品456播放| www视频免费看| 国产精品午夜免费观看网站| 亚洲a级在线观看| 九月丁香婷婷亚洲综合色| 国产成人精品免费直播| 久久九九AV免费精品| 黄网站在线播放视频免费观看| 久久亚洲春色中文字幕久久久| 亚洲 国产 图片| 成人免费在线视频| 性无码免费一区二区三区在线| 色视频在线观看免费| 亚洲冬月枫中文字幕在线看| 久久久青草青青国产亚洲免观| 最近的中文字幕大全免费版| 久久国产乱子伦精品免费一| 农村寡妇一级毛片免费看视频| 亚洲精品免费网站| 亚洲视频在线观看网站| 日日噜噜噜噜夜夜爽亚洲精品| 免费的涩涩视频在线播放| 18禁免费无码无遮挡不卡网站 | 秋霞人成在线观看免费视频| 猫咪免费观看人成网站在线|