時間限制: 1 sec 記憶體限制: 128 mb
假設渣渣灰有乙個女朋友,他的女朋友要他陪著一起去公園。由於渣渣灰不喜歡運動,所以他想找一條最短的路到達公園。由於途中會有許多消費點,而每到乙個消費點女朋友就要購物,而渣渣灰比較摳,所以假如有多條最短路,則他會選擇途中消費點最便宜的。給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s,終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。
輸入nm,點的編號是1~n然後是m行,每行4個數 abdp,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 st;起點s,終點。n和m為0時輸入結束。
(1輸出 一行有兩個數, 最短距離及其花費。
2 21 2 5 10
2 1 4 12
1 24 4
1 2 5 6
2 3 4 5
1 4 5 10
4 3 4 2
1 36 7
1 2 5 6
1 3 5 1
2 6 2 1
3 4 1 1
4 2 1 1
4 5 1 1
5 2 3 1
5 60 0
4 12
9 11
4 3輸入樣例的空行只是為了讓大家分辨資料,輸入有沒有空行都沒關係。輸出樣例沒有空行。
dijkstra演算法求單源最短路簡單擴充套件,我們再建立乙個value陣列儲存花費情況。在鬆弛時對value進行改變。
鬆弛成功則value(s->i)=value(s->k->i)。
若最短路相等則對value值進行比較,即value(s->i)=min(value(s->k->i),value(s->i))。
s為源點,i為當前終點,k為中間點。最終輸出最短路及對應value值即可。
#include#define inf 0x3f3f3f3f
using namespace std;
const int maxn=1e3+10;
int n,m;
struct node
road[maxn][maxn];
int dis[maxn];//最短距離
bool vis[maxn];
int cost[maxn];//花費
void dijkstra(int s)
for(int u=1;ucost[k]+road[k][i].cs)
//if
}//for
}}int main()
}int s,t;
scanf("%d%d",&s,&t);
dijkstra(s);
printf("%d %d\n",dis[t],cost[t]);
}return 0;
}
#include #include #define inf 0x3f3f3f3f
#define min(a,b) a>b?b:a
struct node
g[1005][1005];
int dist[1005];//距離
int value[1005];//費用
int used[1005];//標記
int n,m,i,j;
void dijkstra(int s)
if(u==-1)//判斷所有頂點是否都到達過
return ;
for(i=1,k=0;i<=n;i++)
if(dist[u]==dist[i]&&used[i]==0)
d[k++]=i;//從起點到下乙個要訪問的頂點的最小距離可能有多個
for(i=0;iused[d[i]]=1;
for(i=0;ifor(j=1;j<=n;j++)
if(g[d[i]][j].adj!=inf && (dist[d[i]]+g[d[i]][j].adj)<=dist[j])
}}int main()
} int s,t;
scanf("%d%d",&s,&t);
dijkstra(s);
printf("%d %d\n",dist[t],value[t]);
} return 0;
}
1407 最短距離
兩個點 a b 均在做勻速直線運動。給出 t 0時刻 a b 的座標,以及 a b 的速度,計算t 0時兩個點的距離的最小值。輸入的第一行包含乙個整數 t 1 t 200 表示一共有 t 組測試資料。對於每組測試資料,第一行包含4個整數 x a y a v ax v ay 103 x a y a v...
編輯最短距離
給定兩個字串s和t,對於t我們允許三種操作 1 在任意位置新增任意字元 2 刪除存在的任意字元 3 修改任意字元 問最少操作多少次可以把字串t變成s?例如 s abcf t dbfg 那麼我們可以 1 把d改為a 2 刪掉g 3 加入c 所以答案是3。1 把t中字元全刪了,再新增s的全部字元,操作次...
素數最短距離問題
素數距離問題 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料...