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

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

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

    JAVA—咖啡館

    ——?dú)g迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗(yàn),分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請(qǐng)與我聯(lián)系。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    圖-每一對(duì)端點(diǎn)間的最小距離

    與傳遞閉包問題 非常相似的一個(gè)問題是,能不能給出一個(gè)矩陣,根據(jù)矩陣可以以時(shí)間代價(jià)O(n)的方式得到在一個(gè)有向代權(quán)圖中任意指定端點(diǎn)之間的最短距離。求的這個(gè)矩陣的問題被稱為每一對(duì)端點(diǎn)間的最小距離問題。

    這里采用的是Floyd算法,它與WalShall 算法非常相似:

    如果A可以到達(dá)B,距離為x,且C可以到達(dá)A,距離為y,則求得C可以到達(dá)B,距離為 z = x + y,z小于如果c到B的原來的距離,則用z更新矩陣,否則c到B距離維持不變。

    和最小路徑算法類似,這里用一個(gè)很大數(shù)字INFINITY來表示兩個(gè)端點(diǎn)之間距離為無窮大的情況,即不通。這里INFINITY=最大的int值(~(1<<31))。

    Floyd.main()提供簡(jiǎn)單的測(cè)試。

    與WalShall 一樣,F(xiàn)loyd算法本身的時(shí)間代價(jià)為O(n^3)

    代碼如下:

     

     1class Floyd {
     2    private int[][] adjMat;
     3    private static final int INFINITY = ~(1<<31);
     4
     5    Floyd(int size) {
     6        adjMat = new int[size][size];
     7        for(int i=0; i<size; i++)
     8            for(int j=0; j<size; j++)
     9                adjMat[i][j] = INFINITY;
    10    }

    11
    12    void connect(int from, int to, int length) {
    13        adjMat[from][to] = length;
    14    }

    15
    16    void floyd() //floyd算法
    17        for(int y=0; y<adjMat.length; y++//查找每一行
    18            for(int x=0; x<adjMat.length; x++// 查找每個(gè)單元格
    19                if(adjMat[y][x] != INFINITY)    //如果 y 可以到達(dá) x
    20                    for(int z=0; z<adjMat.length; z++)    //查找所有行的y列
    21                        //如果 z 可以到達(dá)y ,說明z
    22                        //可以直接到達(dá)x,如果算出來的新距離小于原來的距離,則更新
    23                        if(adjMat[z][y] != INFINITY) {
    24                            int newLength = adjMat[z][y] + adjMat[y][x];
    25                            adjMat[z][x] = newLength < adjMat[z][x] ? newLength : adjMat[z][x];    
    26                        }

    27        
    28    }

    29
    30    int[][] getConnections() {
    31        return adjMat;
    32    }

    33
    34    public static void main(String[] args) {
    35        Floyd w = new Floyd(5);
    36        w.connect(1,0,70);
    37        w.connect(2,0,30);
    38        w.connect(1,3,10);
    39        w.connect(3,2,20);
    40        for(int[] a: w.getConnections()) {
    41            for(int i: a) System.out.print((i == INFINITY? "INF" : i) + "\t");
    42            System.out.println();
    43        }

    44        w.floyd();
    45        System.out.println("==================");
    46        for(int[] a: w.getConnections()) {
    47            for(int i: a) System.out.print((i == INFINITY? "INF" : i) + "\t");
    48            System.out.println();
    49        }

    50    }

    51}
    posted on 2008-05-28 15:53 rogerfan 閱讀(406) 評(píng)論(0)  編輯  收藏 所屬分類: 【JAVA算法】
    主站蜘蛛池模板: 亚洲国产精品乱码一区二区| 亚洲国产午夜福利在线播放| 久久亚洲春色中文字幕久久久| 三年在线观看免费观看完整版中文 | 国产成人无码免费看视频软件| 亚洲伊人久久大香线蕉啊 | 亚洲一级毛片免费在线观看| 日产亚洲一区二区三区| 亚洲精品视频免费在线观看| 亚洲Av高清一区二区三区| 一个人免费观看www视频在线| 亚洲无人区码一二三码区别图片| 日韩欧美一区二区三区免费观看 | 国产性爱在线观看亚洲黄色一级片| 免费人人潮人人爽一区二区| 亚洲午夜福利在线观看| 久操视频在线免费观看| 国产成人精品日本亚洲18图| 在线观看人成网站深夜免费| 日韩精品视频在线观看免费 | 国外亚洲成AV人片在线观看| 国产麻豆成人传媒免费观看| 亚洲酒色1314狠狠做| 成年人网站在线免费观看| 白白色免费在线视频| 精品久久久久久亚洲| 99在线精品免费视频九九视| 精品女同一区二区三区免费播放| 亚洲中文字幕日产乱码高清app| 99免费在线观看视频| 亚洲国产精品99久久久久久| 中文字幕亚洲日韩无线码| 色欲色香天天天综合网站免费| 亚洲AV成人一区二区三区在线看 | 国产va免费精品| 亚洲午夜成激人情在线影院| 亚洲午夜av影院| 国产桃色在线成免费视频| sihu国产精品永久免费| 亚洲欧洲自拍拍偷综合| 亚洲国产成人乱码精品女人久久久不卡 |