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

poj 1984 Navigation Nightmare 并查集

   并查集應(yīng)用的變形。題目意思是一個圖中,只有上下左右四個方向的邊。給出這樣的一些邊,
求任意指定的2個節(jié)點(diǎn)之間的距離。
   有可能當(dāng)前給出的信息,沒有涉及到要求的2個節(jié)點(diǎn),或者只涉及到了1個節(jié)點(diǎn),那么肯定
無法確定它們的距離。或者根據(jù)已經(jīng)給出的邊只知道這2個節(jié)點(diǎn)在不同的聯(lián)通分量里面,那么其
距離也是無法確定的,根據(jù)題目要求,輸出-1。
   問題是如果能夠確定它們在一個聯(lián)通分量里面,如何確定它們的距離了。
   這個題的關(guān)鍵在于,只有上下左右四個方向的邊,假設(shè)每個節(jié)點(diǎn)都有一個坐標(biāo)的話,那么它們
相對于代表該聯(lián)通分量節(jié)點(diǎn)的坐標(biāo)肯定是固定的,那么就不需要考慮圖里面有環(huán)之類的情況了。
這樣就可以很方便的應(yīng)用并查集來解了。
   利用并查集,給每個節(jié)點(diǎn)附加其它信息,即相對于代表該并查集的節(jié)點(diǎn)的坐標(biāo)(x,y)。
在FindSet里面求出坐標(biāo),在UnionSet里面修改合并后新加入的另外一個集合的根節(jié)點(diǎn)的坐標(biāo)即可。
   代碼如下:

#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;

const int MAX_N = 40010;
int nN, nM;
int nSets[MAX_N];
int nX[MAX_N];
int nY[MAX_N];
char szInput[MAX_N][100];

void MakeSets(int nNum)
{
    for (int i = 0; i < nNum; ++i)
    {
        nSets[i] = i;
        nX[i] = nY[i] = 0;
    }
}

int FindSets(int nI)
{
    if (nSets[nI] != nI)
    {
        int nPre = nSets[nI];
        nSets[nI] = FindSets(nSets[nI]);
        nX[nI] += nX[nPre];
        nY[nI] += nY[nPre];
    }
    return nSets[nI];
}

void UnionSets(int nBeg, int nEnd, int dx, int dy)
{
    int nA = FindSets(nBeg);
    int nB = FindSets(nEnd);
    if (nA != nB)
    {
        nSets[nB] = nA;//把集合B合并到集合A中
        nX[nB] = nX[nBeg] + dx - nX[nEnd];//因?yàn)榉较蚰孢^來了,所以是減去
        nY[nB] = nY[nBeg] + dy - nY[nEnd];
    }
}

int main()
{
    int nBeg, nEnd, nL;
    char szDir[10];

    while (scanf("%d%d%*c", &nN, &nM) == 2)
    {
        MakeSets(nN);
        for (int i = 0; i < nM; ++i)
        {
            fgets(szInput[i], 100, stdin);
        }
        int nK;
        int nF1, nF2, nI;
        scanf("%d", &nK);
        int nCur = 0;
        while (nK--)
        {
            scanf("%d%d%d", &nF1, &nF2, &nI);
            for (int i = nCur; i < nI; ++i)
            {
                sscanf(szInput[i], "%d%d%d%s", &nBeg,
                       &nEnd, &nL, szDir);
                int dx = 0, dy = 0;
                switch (szDir[0])
                {
                    case 'N': dy += nL; break;
                    case 'S': dy -= nL; break;
                    case 'E': dx += nL; break;
                    case 'W': dx -= nL; break;
                }
                UnionSets(nBeg, nEnd, dx, dy);
            }
            nCur = nI;
            
            if (FindSets(nF1) != FindSets(nF2))
            {
                printf("-1\n");
            }
            else
            {
                printf("%d\n", abs(nX[nF1] - nX[nF2])
                        + abs(nY[nF1] - nY[nF2]));
            }
        }
    }

    return 0;
}

posted on 2012-10-09 21:25 yx 閱讀(967) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導(dǎo)航

統(tǒng)計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學(xué)

網(wǎ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>
            久久国产99| 日韩视频中文| 亚洲欧美中文日韩在线| 日韩视频免费大全中文字幕| 亚洲国产精品va在看黑人| 精品不卡一区| 亚洲国产精品99久久久久久久久| 依依成人综合视频| 99精品视频一区二区三区| 亚洲免费av电影| 一区二区av| 欧美一区二区精美| 免费日韩精品中文字幕视频在线| 欧美成人福利视频| 一区二区三区国产精华| 午夜伦欧美伦电影理论片| 久久国产精品久久久| 久久理论片午夜琪琪电影网| 欧美久久久久久蜜桃| 国产精品免费网站在线观看| 国产综合色产| 一区二区高清视频在线观看| 久久精品一区二区国产| 亚洲国产毛片完整版| 欧美成人自拍| 亚洲一区二区网站| 嫩草国产精品入口| 国产农村妇女毛片精品久久麻豆 | 久久爱www久久做| 欧美xxxx在线观看| 国产精品初高中精品久久| 国内激情久久| 亚洲一二三四区| 欧美高清视频一二三区| 亚洲视频大全| 欧美精品1区| 欲色影视综合吧| 欧美一区2区视频在线观看| 亚洲第一级黄色片| 久久本道综合色狠狠五月| 欧美三区美女| 亚洲国产高清aⅴ视频| 午夜精品在线| 亚洲麻豆一区| 欧美国产激情二区三区| 韩国欧美国产1区| 欧美中文字幕在线播放| 亚洲人成在线观看一区二区 | 亚洲精品之草原avav久久| 国产精品任我爽爆在线播放 | 久久亚洲一区二区三区四区| 欧美日韩国产精品| 亚洲国产日韩欧美在线动漫| 久久国产免费看| 亚洲午夜国产成人av电影男同| 欧美日韩国产限制| 亚洲欧美视频在线观看| 亚洲黄色大片| 亚洲欧美日韩一区在线观看| 欧美成人午夜激情在线| 在线综合亚洲| 欧美国产日产韩国视频| 在线精品视频一区二区| 久久精品国产999大香线蕉| 99视频一区| 欧美日韩国产美| 99视频精品在线| 亚洲娇小video精品| 久久久久亚洲综合| 亚洲国产导航| 亚洲精品网址在线观看| 欧美久久电影| 亚洲天堂免费观看| 亚洲一区高清| 狠狠操狠狠色综合网| 狼人社综合社区| 男女激情视频一区| 亚洲视频大全| 亚洲综合成人婷婷小说| 国产精品免费电影| 老鸭窝亚洲一区二区三区| 久久免费视频在线| 国产一区二区0| 亚洲视频国产视频| 中文有码久久| 国产主播一区二区| 亚洲第一区中文99精品| 欧美大色视频| 亚洲自拍偷拍色片视频| 欧美专区福利在线| 亚洲精品之草原avav久久| 亚洲精品一区二区三区在线观看| 欧美四级在线观看| 久久综合久久88| 欧美日韩午夜| 久久这里有精品15一区二区三区| 欧美不卡在线| 久久国产一区二区| 欧美日本高清| 久久久久久亚洲精品不卡4k岛国| 欧美**人妖| 欧美影院在线播放| 欧美寡妇偷汉性猛交| 亚洲欧美成人| 欧美二区在线| 久久久久久久91| 欧美片网站免费| 男男成人高潮片免费网站| 欧美香蕉大胸在线视频观看| 久久亚洲综合色| 国产精品久久综合| 最新中文字幕亚洲| 精品不卡一区二区三区| 亚洲欧美日韩在线播放| 国产精品视频网址| 亚洲人人精品| 亚洲高清不卡| 欧美一区二区福利在线| 一区二区三区av| 欧美va天堂va视频va在线| 欧美在线3区| 久久精品免费播放| 性xx色xx综合久久久xx| 欧美高清视频一区二区三区在线观看| 久久精品视频免费观看| 欧美三区在线观看| 亚洲日本va在线观看| 亚洲第一天堂av| 久久精品视频在线看| 久久激情五月丁香伊人| 国产精品男gay被猛男狂揉视频| 亚洲国产专区校园欧美| 亚洲激情成人在线| 美乳少妇欧美精品| 免费av成人在线| 1769国产精品| 快播亚洲色图| 妖精成人www高清在线观看| 久久精品av麻豆的观看方式| 一区二区三区久久久| 欧美成人精品在线观看| 麻豆精品精品国产自在97香蕉| 国产欧美欧美| 性久久久久久久久久久久| 午夜精品视频一区| 国产精品热久久久久夜色精品三区 | 欧美精品麻豆| 欧美激情网站在线观看| 在线成人av| 嫩模写真一区二区三区三州| 亚洲第一区在线观看| 伊人狠狠色j香婷婷综合| 亚洲人www| 久久精品人人| 免费看亚洲片| 日韩一区二区福利| 欧美日韩精品在线视频| 在线性视频日韩欧美| 羞羞答答国产精品www一本| 国产精品一国产精品k频道56| 亚洲一区二区三区在线| 久久精品30| 亚洲黄色毛片| 国产精品免费看| 久久综合狠狠| 欧美视频在线一区二区三区| 亚洲天堂av在线免费| 国产精品视频一二| 欧美日韩成人一区二区| 欧美成人免费视频| 99国产精品99久久久久久| 国产精品国产a级| 久久精品综合一区| 亚洲理伦在线| 久久综合久色欧美综合狠狠| 91久久夜色精品国产九色| 欧美四级在线观看| 久久久久综合网| 一区二区三区欧美日韩| 狂野欧美激情性xxxx| 亚洲一区二区三区免费在线观看 | 国产日产欧产精品推荐色 | 国产色综合久久| 久久久之久亚州精品露出| 91久久精品日日躁夜夜躁国产| 欧美日韩在线不卡一区| 久久久91精品国产| 亚洲美女在线视频| 美女网站久久| 欧美亚洲日本一区| 日韩亚洲欧美高清| 激情综合五月天| 国产精品永久| 欧美日韩直播| 欧美激情欧美激情在线五月| 久久精品91久久香蕉加勒比| 一区二区三区欧美在线观看| 欧美国产日韩xxxxx| 久久www成人_看片免费不卡| 国产精品99久久久久久有的能看|