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

            2009年7月29日

            題目鏈接:PKU 1122 FDNY to the Rescue!
              
            分類:Diskastra

            題目分析與算法原型
                    有點(diǎn)郁悶,這題由于題目意思沒(méi)看仔細(xì)加上有些位置沒(méi)有理解充分,貢獻(xiàn)了好幾次WA,雖然只是一個(gè)Dijkastra的簡(jiǎn)單應(yīng)用,不過(guò)此題還是要細(xì)心應(yīng)對(duì)的,大致做法是先將輸入的矩陣轉(zhuǎn)置一下,使得單終點(diǎn)最短路徑變成單源點(diǎn)最短路徑,然后用Dijkastra處理即可(注意題目的一些提示條件,看清楚題目意思)


            Code:

              1
            #include<stdio.h>
              2#include<stdlib.h>
              3#include<string.h>
              4#define max 1000000000
              5#define len 25
              6
              7int n,map[len][len],dis[len],s,adj[len],path[len],visit[len];
              8bool finish;
              9
             10struct node
             11{
             12    int dis,num;
             13}
            place[len];
             14
             15void init()
             16{
             17    int i,j;
             18    for(i=1;i<=n;i++)
             19        for(j=1;j<=n;j++)
             20        {
             21            if(i==j)map[i][j]=0;
             22            else map[i][j]=max;
             23        }

             24}

             25int cmp(const void * a,const void * b)
             26{
             27    return (*(node *)a).dis > (*(node *)b).dis ? 1:-1;
             28}

             29void Dijkastra(int s)//s為源點(diǎn)
             30{
             31    int i,j;
             32    for(i=1;i<=n;i++)
             33    {
             34        dis[i]=map[s][i];
             35        visit[i]=0;
             36        if(i!=s&&dis[i]<max)path[i]=s;
             37        else path[i]=-1;
             38    }

             39    visit[s]=1;
             40    for(i=1;i<n;i++)
             41    {
             42        int min=max,u;
             43        for(j=1;j<=n;j++)
             44            if(visit[j]==0&&dis[j]<min)
             45            {
             46                u=j;
             47                min=dis[j];
             48            }

             49            if(min==max)return;//此語(yǔ)句對(duì)于非連通圖是必須的,表示當(dāng)前已經(jīng)不存在路徑了
             50            visit[u]=1;
             51            for(j=1;j<=n;j++)
             52                if(visit[j]==0&&map[u][j]<max&&dis[u]+map[u][j]<dis[j])
             53                {
             54                    dis[j]=dis[u]+map[u][j];
             55                    path[j]=u;
             56                }

             57    }

             58}

             59int main()
             60{
             61    int i,j,pos;
             62    while(scanf("%d",&n)!=EOF)
             63    {
             64        init();
             65        finish=false;
             66        for(i=1;i<=n;i++)
             67            for(j=1;j<=n;j++)
             68            {
             69                int l;
             70                scanf("%d",&l);
             71                if(l!=-1)map[j][i]=l;
             72            }

             73            scanf("%d",&s);
             74            pos=0;
             75            char ch;
             76            memset(adj,0,sizeof(adj));
             77
             78            printf("Org\tDest\tTime\tPath\n");
             79            while(1)
             80            {
             81                ch=getchar();
             82                if(ch==10)break;
             83                while(!(ch>='0'&&ch<='9'))ch=getchar();
             84                
             85                while(ch>='0'&&ch<='9')
             86                {
             87                    adj[pos]*=10;
             88                    adj[pos]+=ch-'0';
             89                    ch=getchar();
             90                }

             91                
             92                if(adj[pos]==s)
             93                {
             94                    printf("%d\t%d\t%d\t%d\n",s,s,0,s);
             95                    adj[pos]=0;
             96                }

             97                else pos++;
             98                if(ch==10)break;
             99            }

            100            Dijkastra(s);
            101            for(i=0;i<pos;i++)
            102            {
            103                place[i].dis=dis[adj[i]];
            104                place[i].num=adj[i];
            105            }

            106            qsort(place,pos,sizeof(place[0]),cmp);
            107            
            108            
            109            for(i=0;i<pos;i++)
            110            {
            111                printf("%d\t%d\t%d\t%d\t",place[i].num,s,place[i].dis,place[i].num);
            112                int kk=path[place[i].num];
            113                while(1)
            114                {
            115                    printf("%d",kk);
            116                    if(kk==s)break;
            117                    else printf("\t");
            118                    kk=path[kk];
            119                }

            120                printf("\n");
            121            }

            122    }

            123    return 0;            
            124}

            posted on 2009-07-29 20:12 蝸牛也Coding 閱讀(255) 評(píng)論(0)  編輯 收藏 引用


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


            <2009年10月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(8)

            隨筆檔案(78)

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            欧美亚洲色综久久精品国产| 久久久久亚洲AV无码麻豆| 婷婷综合久久狠狠色99h| 亚洲成色www久久网站夜月| 久久精品国产亚洲一区二区| 日韩美女18网站久久精品| 久久国产乱子伦精品免费强| 国产福利电影一区二区三区,免费久久久久久久精 | 久久国产香蕉视频| AV狠狠色丁香婷婷综合久久| 久久久久久久久波多野高潮| 久久成人18免费网站| 久久精品国内一区二区三区| 久久天天躁狠狠躁夜夜av浪潮| 亚洲嫩草影院久久精品| 伊人久久大香线蕉综合5g| 久久久久久亚洲精品无码| 亚洲精品乱码久久久久久自慰| 91精品国产综合久久香蕉| 亚洲色欲久久久综合网 | 久久这里有精品| 精品久久久久久久中文字幕| 97香蕉久久夜色精品国产| 国产精品久久久久久久人人看| 成人综合伊人五月婷久久| 久久久高清免费视频| 国内精品久久久久影院网站| 国产成人久久精品一区二区三区| 欧美久久久久久| 久久国产成人午夜aⅴ影院| 久久青草国产精品一区| 久久久久人妻精品一区| 狠狠色狠狠色综合久久| 四虎影视久久久免费| 国产AⅤ精品一区二区三区久久| 亚洲国产精品一区二区久久hs| 久久久久黑人强伦姧人妻| 久久综合久久综合久久综合| 91精品国产91久久久久福利| 国产精品gz久久久| 久久精品成人|