青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CSU OJ - 1219: 建食堂 (所有結(jié)點(diǎn)間的最短路徑)

鏈接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1219

這個(gè)題
就是求出所有結(jié)點(diǎn)的距離之后,再找出某個(gè)結(jié)點(diǎn),該結(jié)點(diǎn)離其它結(jié)點(diǎn)的最大距離是所有結(jié)點(diǎn)中是最小的...
解法1:深搜出所有結(jié)點(diǎn)間的距離,但是會(huì)超時(shí),即使深搜的過程使用中記憶化搜索(就是用2維數(shù)組保存已經(jīng)搜出的答案,如果后面的搜索需要用到直接使用即可)...
解法2:Floyd算法,3重循環(huán)直接找出所有結(jié)點(diǎn)之間的最短距離
解法3:對(duì)每一個(gè)結(jié)點(diǎn)應(yīng)用一次迪杰斯特拉算法,找出所有結(jié)點(diǎn)與其它結(jié)點(diǎn)間的最短距離...

解法2:
#include <stdio.h>
#include <string.h>
#define MAX  (100 + 10)
#define INF (1000000 + 10)
int nN, nM;
int nDis[MAX][MAX];
void SearchAll()
{
    for (int k = 0; k < nN; ++k)
    {
        for (int i = 0; i < nN; ++i)
        {   
            for (int j = 0; j < nN; ++j)
            {
                if (nDis[i][k] + nDis[k][j] < nDis[i][j])
                {
                    nDis[i][j] = nDis[j][i] = nDis[i][k] + nDis[k][j];
                }
            }
        }
    }
}
int main()
{
    while (scanf("%d%d", &nN, &nM) == 2)
    {
        for (int i = 0; i < nN; ++i)
        {
            for (int j = 0; j < nN; ++j)
            {
                if (i == j)
                {
                    nDis[i][j] = 0;
                }
                else
                {
                    nDis[i][j] = INF;
                }
            }
        }
        while (nM--)
        {
            int nX, nY, nK;
            scanf("%d%d%d", &nX, &nY, &nK);
            nDis[nX][nY] = nDis[nY][nX] = nK;
        }
        SearchAll();
        bool bOk = false;
        int nMin = 1 << 30;
        
        for (int i = 0; i < nN; ++i)
        {
            int nTemp = 0;
            int j = 0;
            for ( ; j < nN; ++j)
            {
                if (i == j) continue;
                if (nDis[i][j] == INF)
                {
                    break;
                }
                else
                {
                    if (nDis[i][j] > nTemp)
                    {
                        nTemp = nDis[i][j];
                    }
                }
            }
            if (j == nN)
            {
                bOk = true;
                if (nTemp < nMin)
                {
                    nMin = nTemp;
                }
            }
        }
        
        if (bOk)
        {
            printf("%d\n", nMin);
        }
        else
        {
            printf("Can not\n");
        }
    }
    return 0;
}

關(guān)于Floyd算法,可以這樣理解...比如剛開始只取2個(gè)結(jié)點(diǎn)i,j,它們的距離一定是dis(i,j),但是還有其它結(jié)點(diǎn),需要把其它結(jié)點(diǎn)也慢慢加進(jìn)來,所以最外層關(guān)于k的循環(huán)意思就是從0至nN-1,把所有其它結(jié)點(diǎn)加進(jìn)來,比如加入0號(hào)結(jié)點(diǎn)后,距離dis(i,0)+dis(0,j)可能會(huì)比dis(i,j)小,如果是這樣就更新dis(i,j),然后后面加入1號(hào)結(jié)點(diǎn)的時(shí)候,實(shí)際上是在已經(jīng)加入0號(hào)結(jié)點(diǎn)的基礎(chǔ)上進(jìn)行的處理了,效果變成dis(i,0,1,j),可能是最小的,而且中間的0,1也可能是不存在的,當(dāng)然是在dis(i,j)原本就是最小的情況下...
這個(gè)算法可以用下面這個(gè)圖片描述...


解法3:
#include <stdio.h>
#include <string.h>
#define MAX  (100 + 10)
#define INF (1000000 + 10)
int nN, nM;
int nDis[MAX][MAX];
void Search(int nSource)
{
    bool bVisit[MAX];
    memset(bVisit, false, sizeof(bVisit));
    bVisit[nSource] = true;
    for (int i = 0; i < nN - 1; ++i)
    {
        int nMin = INF;
        int nMinPos = 0;
        for (int j = 0; j < nN; ++j)
        {
            if (!bVisit[j] && nDis[nSource][j] < nMin)
            {
                nMin = nDis[nSource][j];
                nMinPos = j;
            }
        }
        if (bVisit[nMinPos] == false)
        {
            bVisit[nMinPos] = true;
            for (int j = 0; j < nN; ++j)
            {
                if (nDis[nSource][nMinPos] + nDis[nMinPos][j] < nDis[nSource][j])
                {
                    nDis[nSource][j] = nDis[nSource][nMinPos] + nDis[nMinPos][j];
                }
            }
        }
    }
}
void SearchAll()
{
    for (int k = 0; k < nN; ++k)
    {
        Search(k);
    }
}
int main()
{
    while (scanf("%d%d", &nN, &nM) == 2)
    {
        for (int i = 0; i < nN; ++i)
        {
            for (int j = 0; j < nN; ++j)
            {
                if (i == j)
                {
                    nDis[i][j] = 0;
                }
                else
                {
                    nDis[i][j] = INF;
                }
            }
        }
        while (nM--)
        {
            int nX, nY, nK;
            scanf("%d%d%d", &nX, &nY, &nK);
            nDis[nX][nY] = nDis[nY][nX] = nK;
        }
        SearchAll();
        bool bOk = false;
        int nMin = 1 << 30;
        for (int i = 0; i < nN; ++i)
        {
            int nTemp = 0;
            int j = 0;
            for ( ; j < nN; ++j)
            {
                if (i == j) continue;
                if (nDis[i][j] == INF)
                {
                    break;
                }
                else
                {
                    if (nDis[i][j] > nTemp)
                    {
                        nTemp = nDis[i][j];
                    }
                }
            }
            if (j == nN)
            {
                bOk = true;
                if (nTemp < nMin)
                {
                    nMin = nTemp;
                }
            }
        }
        if (bOk)
        {
            printf("%d\n", nMin);
        }
        else
        {
            printf("Can not\n");
        }
    }
    return 0;
}
迪杰斯特拉算法的核心思想是維護(hù)一個(gè)源點(diǎn)頂點(diǎn)集合,任何最短路徑一定是從這個(gè)頂點(diǎn)集合發(fā)出的...
初始化時(shí),這個(gè)集合就是源點(diǎn)...
我們從該其它結(jié)點(diǎn)中選出一個(gè)結(jié)點(diǎn),該結(jié)點(diǎn)到源點(diǎn)的距離最小...
顯然,這個(gè)距離就是源點(diǎn)到該結(jié)點(diǎn)的最短距離了,我們已經(jīng)找到了答案的一部分了...然后,我們就把該結(jié)點(diǎn)加入前面所說的頂點(diǎn)集合...
現(xiàn)在頂點(diǎn)集合更新了,我們必須得更新距離了...由于新加入的結(jié)點(diǎn)可能發(fā)出邊使得原來源點(diǎn)到某些結(jié)點(diǎn)的距離更小,也就是我們的源點(diǎn)變大了,邊也變多了,所以我們的最短距離集合的值也必須變化了...
該算法一直循環(huán)nN-1次,直至所有的點(diǎn)都加入源點(diǎn)頂點(diǎn)集合...

posted on 2011-12-04 22:20 yx 閱讀(1256) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 解題報(bào)告圖論

<2011年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

導(dǎo)航

統(tǒng)計(jì)

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學(xué)

網(wǎng)友

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区高清视频| 亚洲一区日韩| 欧美剧在线观看| 午夜欧美不卡精品aaaaa| 国产视频在线观看一区二区三区| 欧美激情无毛| 久久国产欧美精品| 久久久国产亚洲精品| 亚洲欧美日韩天堂| 亚洲视频第一页| 一区二区三区国产在线观看| 欧美日韩国产小视频在线观看| 欧美精品三区| 国产精品丝袜91| 日韩网站在线| 亚洲国产裸拍裸体视频在线观看乱了 | 香蕉成人伊视频在线观看| 最新高清无码专区| 久久精精品视频| 欧美第十八页| 欧美激情黄色片| 中文有码久久| 午夜伦欧美伦电影理论片| 免费不卡欧美自拍视频| 欧美久久九九| 蜜桃久久精品乱码一区二区| 欧美日韩a区| 狠狠色噜噜狠狠狠狠色吗综合| 国产午夜精品理论片a级大结局| 欧美成在线观看| 一区二区免费在线播放| 西西裸体人体做爰大胆久久久| 久久综合伊人| 欧美三级在线视频| 亚洲国产视频一区二区| 一区二区三区欧美视频| 久久久久久久久久久久久9999| 欧美成人精品一区二区| 亚洲欧美中文另类| 美女黄毛**国产精品啪啪| 亚洲欧洲精品一区二区三区不卡 | 亚洲福利视频二区| 亚洲一区欧美一区| 久久久999精品视频| 91久久夜色精品国产九色| 欧美一区二区视频在线| 欧美电影资源| 韩国视频理论视频久久| 中日韩视频在线观看| 欧美国产日韩一二三区| 夜夜嗨av一区二区三区四季av| 性做久久久久久久免费看| 免费一区二区三区| 国产日韩在线亚洲字幕中文| 中文在线资源观看网站视频免费不卡| 欧美亚洲免费| 亚洲小视频在线观看| 男人的天堂亚洲在线| 国产欧美日韩综合精品二区| 亚洲午夜精品一区二区| 久久精品国产一区二区电影| 亚洲一区二区四区| 亚洲精品久久久久中文字幕欢迎你| 午夜久久福利| 国产女精品视频网站免费| 亚洲精品久久久一区二区三区| 欧美在线不卡| 亚洲色图在线视频| 国产精品久久久久久av下载红粉| 亚洲人成网站色ww在线| 亚洲最新视频在线播放| 欧美大香线蕉线伊人久久国产精品| 亚洲欧美日韩久久精品| 亚洲婷婷综合久久一本伊一区| 美国成人直播| 一道本一区二区| 亚洲精品一区二区三区樱花| 欧美日韩一区二区三区| 国产精品国产三级国产aⅴ浪潮 | 欧美成年人视频网站| 91久久国产综合久久91精品网站| 久久久久久**毛片大全| 久久久久久一区二区| 韩国精品在线观看| 欧美黄色一区| 欧美激情在线有限公司| 日韩视频免费观看高清在线视频| 亚洲日韩欧美视频| 欧美日韩在线高清| 欧美一区二区视频在线| 欧美亚洲三区| 亚洲国产日韩在线一区模特| 欧美黄色影院| 国产精品一区久久久| 午夜精品视频在线观看| 亚洲精品综合在线| 亚洲一区欧美二区| 国产揄拍国内精品对白| 亚洲第一精品福利| 欧美日韩美女在线| 久久久999精品| 玖玖玖免费嫩草在线影院一区| 亚洲精品免费看| 日韩一二三区视频| 国产婷婷一区二区| 亚洲丶国产丶欧美一区二区三区 | 每日更新成人在线视频| 亚洲伦理在线免费看| 日韩午夜激情av| 欧美激情亚洲国产| 久久五月激情| 欧美日韩精品免费观看视频| 久久精品视频在线| 麻豆亚洲精品| 亚洲女性裸体视频| 亚洲精品1234| 一区二区三区四区国产精品| 亚洲成色www久久网站| 亚洲第一在线综合在线| 国内精品福利| 亚洲精品自在久久| 最新中文字幕一区二区三区| 中国成人亚色综合网站| 亚洲美女视频| 欧美一级午夜免费电影| 欧美一级黄色网| 欧美电影在线观看完整版| 老牛影视一区二区三区| 国产精品草草| 一区二区免费在线视频| 亚洲经典自拍| 免费日韩精品中文字幕视频在线| 亚洲免费在线视频一区 二区| 久久久久国产免费免费| 亚洲欧美在线视频观看| 欧美精品尤物在线| 欧美成人午夜剧场免费观看| 国产精品亚洲网站| 91久久久精品| 亚洲电影av| 欧美一区二区三区免费视| 中文久久乱码一区二区| 欧美在线一二三区| 久久精品首页| 欧美一区二区三区免费视| 久久青草欧美一区二区三区| 久久美女艺术照精彩视频福利播放| 亚洲国产精品一区二区三区| 亚洲欧美清纯在线制服| 亚洲女人小视频在线观看| 欧美日韩在线播放三区四区| 亚洲国产一区二区a毛片| 极品av少妇一区二区| 亚洲自拍16p| 午夜日本精品| 国产日韩成人精品| 久久久久九九九九| 欧美成人在线影院| 中文一区字幕| 99re6这里只有精品| 国产精品二区影院| 欧美激情按摩| 亚洲欧美不卡| 国产欧美一区二区三区另类精品 | 国产日韩高清一区二区三区在线| 欧美在线视屏| 久久久久在线| 激情婷婷久久| 久久午夜国产精品| 99国产精品久久久| 亚洲一级片在线观看| 欧美日韩免费在线| 亚洲已满18点击进入久久| 亚洲免费一在线| 久久精品1区| 午夜日韩在线| 国产精品成人v| 亚洲一区二区三区在线播放| 久久99在线观看| 欧美日韩一区在线播放| 亚洲午夜久久久久久久久电影院| 亚洲一区二区网站| 国产亚洲精品激情久久| 99精品国产在热久久下载| 亚洲尤物在线| 亚洲一区二区三区欧美| 久久爱www| 亚洲一二三区精品| 国模套图日韩精品一区二区| 蜜臀a∨国产成人精品| 亚洲欧美精品一区| 欧美日韩一区二区三区高清| 亚洲欧美日产图| 亚洲视频你懂的| 国产亚洲精品高潮| 久久综合电影| 久久精品国产亚洲aⅴ| 国产精品青草久久久久福利99| 久久精品亚洲乱码伦伦中文 | 国产精品亚洲综合久久|