題目描述:給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。
輸入:輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點t。n和m為0時輸入結束。
(1輸出:輸出 一行有兩個數, 最短距離及其花費。
樣例輸入:
3 21 2 5 6
2 3 4 5
1 30 0
樣例輸出:
9 11
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include
11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20
21using
namespace
std;
22//
constant declaration
23/*
--------------------------
*/24
//#define ll long long
25#define ll __int64
26const
int m=1100;//
最多點數
27const
int inf=1
<<30;28
const
double eps = 1e-11;29
const
double pi = acos(-1.0
);30
/*--------------------------
*/31
//some essential funtion
32/*
----------------------------------
*/33
void swap(int &a,int &b)
34int max(int a,int b)
35int min(int a,int b)
36int gcd(int a,int b) return
a; }
37/*
----------------------------------
*/38
//for (i = 0; i < n; i++)
39/*
----------------------------------
*/40
41struct
djs42
d[m],g[m][m];
4546
bool
used[m];
47void init(int
n)4857}
58for (i = 1; i <= n; i++)
5963
64 memset(used, 0, sizeof
(used));65}
6667
6869
int dijkstra(int star, int end, int
n)7085}
8687 used[min_num] = 1;88
89for (i = 1; i <= n; i++)
9096
if (!used[i] && d[i].l == d[min_num].l + g[min_num][i].l && d[i].p > d[min_num].p +g[min_num][i].p)
97100
}101
102}
103return
d[end].l;
104}
105106
107108
109110
intmain()
111127
if (g[a][b].l == c && g[b][a].p >c1)
128131
132}
133int
star, end,ans;
134 scanf("
%d%d
", &star, &end);
135 ans =dijkstra(star, end, n);
136 printf("
%d %d\n
", ans, d[end].p);
137}
138139
return0;
140 }
題目1008 最短路徑問題
題目描述 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 ...
Jobdu 題目1008 最短路徑問題
題目描述 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 ...
九度OJ 題目1008 最短路徑問題
一題目描述 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數...