国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HDU杭電acm2066 - 一個人的旅行

2019-11-08 02:25:03
字體:
來源:轉載
供稿:網友

題目地址:http://acm.hdu.edu.cn/showPRoblem.php?pid=2066

/***********************************************************************

這個題如果不學Dijkstra算法,可能不簡單。我也是通過這個題學了Dijkstra算法。

推薦一篇dijkstra算法的文章(轉載):http://blog.csdn.net/winter2121/article/details/55805391

/*********************************************************************************

上面的算法會了,這個題就沒什么難度了

/*******************************

說一個大坑:在輸入城市a,b,time 的時候,要考慮前后輸入了兩次同樣的城市,而時間不同,那么就要選時間短的那個數據。/**************************代碼如下:/******************
//一個人的旅行//時間最少,路程最短即可 (時間==路程) #include<stdio.h>int max=1000000000;#define c 1003int maxnum(int x,int y){    return x>y?x:y;}int t[c][c];//用于輸入城市i到j的距離 int mark[c];//用于標記城市是否訪問 int len[c];//記錄從起點到城市i的距離 int maxc;void begen(){    for(int i=0;i<c;i++)//每個兩城市的時間初始為max        for(int j=0;j<c;j++)            t[i][j]=max;//i=0表家    for(int i=0;i<c;i++)    {        len[i]=max;        mark[i]=0;    }}void input_time(int T){    int a,b,time;    for(int i=0;i<T;i++)//路徑及時間輸入    {           scanf("%d%d%d",&a,&b,&time);           if(time>t[a][b])  //坑             continue;           t[b][a]=t[a][b]=time;//不確定a和b誰大           maxc=maxnum(maxc,maxnum(a,b));    }}void city_begen(int S)//出發城市輸入{    int a;    for(int i=0;i<S;i++)    {        scanf("%d",&a);        len[a]=t[a][0]=t[0][a]=0;//從家到相鄰城市的時間修改為0;    }}void city_end(int D){    int a;    for(int i=0;i<D;i++)//目的城市輸入    {        scanf("%d",&a);        t[a][maxc]=t[maxc][a]=0;//從目的城市到終點的時間設為0    }    }int main(){    int T,S,D;    while(~scanf("%d%d%d",&T,&S,&D))    {        maxc=0;        begen();//初始化數組         input_time(T);        maxc++;   //最大城市號加1,(假設從要去的城市到maxc的時間為0,方便dijkstra的套用)        city_begen(S);      //臨近的城市        city_end(D);         //要到達的城市                for(int i=1;i<=maxc;i++)        {            int k=0,min=max;            for(int j=1;j<=maxc;j++)  //此循環為了找到 目前未訪問 的且 距起點最近 的城市            {                if(mark[j]==0&&len[j]<min)                {                    min=len[j];                    k=j;                }            }            if(k==0)   如果沒找到未標記的城市號,說明計算結束                break;            mark[k]=1;//城市k標記為已訪問             for(int j=1;j<=maxc;j++)   //此循環用于更新數據,取短的路徑放入數組len            {                if(mark[j]==0&&len[j]>len[k]+t[k][j])//比較由0到k原時間與由0到k再到j時間的大小                        len[j]=len[k]+t[k][j];            }        }                printf("%d/n",len[maxc]);    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤台县| 雷州市| 崇阳县| 敖汉旗| 房产| 石狮市| 静乐县| 潞西市| 定日县| 天祝| 德江县| 泉州市| 米泉市| 德令哈市| 仁寿县| 大冶市| 湘潭市| 平塘县| 阆中市| 庄河市| 平安县| 芜湖市| 同仁县| 东兴市| 石台县| 潜江市| 嘉义市| 高雄县| 德州市| 太湖县| 册亨县| 宜宾市| 仪陇县| 克什克腾旗| 海安县| 镇巴县| 福泉市| 丹东市| 克拉玛依市| 阿拉尔市| 东方市|