-
Notifications
You must be signed in to change notification settings - Fork 0
/
Floyd算法最短路径.cpp
298 lines (287 loc) · 4.18 KB
/
Floyd算法最短路径.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
#include<iostream>
#include<string.h>
using namespace std;
int n;
double map[1000][1000];
int dis[1000][1000];
#define INF 0x3f3f3f3f
string res[44];
void init(){
//39个顶点
for(int i=1;i<=39;++i){
if(i<8){
res[i]="S"+to_string(i);//itoa(i) 将i转为字符串
}else if(i<23){
res[i]="A"+to_string(i-7);
}else{
res[i]="P"+to_string(i-22);
}
}
}
double getprice(int n){
double res=INF;
if(n<=300){
res=20;
}else if(n<=350){
res=23;
}else if(n<=400){
res=26;
}else if(n<=450){
res=29;
}else if(n<=500){
res=32;
}else if(n<=600){
res=37;
}else if(n<=700){
res=44;
}else if(n<=800){
res=50;
}else if(n<=900){
res=55;
}else if(n<=1000){
res=60;
}else{
res=(n-1000+99)/100*5+60;
}
return res;
}
int findrows(string s, string* res) {
for (int i = 0; i < 50; ++i) {
if (s == res[i]) {
return i;
}
}
return -1;
}
void Floyd(){
for(int k=1;k<=n;++k){
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(map[i][j]>map[i][k]+map[k][j]){
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
}
int main(){
init();
// for(int i=1;i<=39;++i){
// cout<<res[i]<<" ";
// }
// cout<<endl;
int m;//m条边
cin>>n>>m;
double t;
int x,y;
//init初始化
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
// cin>>t;
if(i==j){
map[i][j]=map[j][i]=0;
}else{
map[i][j]=map[j][i]=INF;
}//else{
// map[i][j]=map[j][i]=t;
// }
}
}
string sx,sy;
// cout<<"m="<<m<<endl;
for(int i=1;i<=m;++i){
// cout<<"i"<<endl;
// getchar();
cin>>sx>>sy;
x=findrows(sx,res);
y=findrows(sy,res);
// cout<<"x="<<x<<" y="<<y<<endl;
cin>>t;
// cout<<"sx="<<sx<<" sy="<<sy<<endl;
// cout<<"sy[0]="<<sy[0]<<endl;
if(sy[0]=='A'){
// cout<<"A";
t=t*0.1;
// cout<<"t="<<t<<endl;
}else{
// cout<<"B";
t=getprice(t);
// cout<<"t="<<t<<endl;
}
if(x==y){
map[x][y]=0;
continue;
}
map[x][y]=t;
map[y][x]=t;
}
cout<<"\n--------------------------------\n";
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<map[i][j]<<" ";
}
cout<<endl;
}
cout<<"\n--------------------------------\n";
Floyd();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<map[i][j]<<" ";
}
cout<<endl;
}
cout<<"\n--------------------------------\n";
for(int i=1;i<=7;++i){
// cout<<"\n-------------------------------S"<<i<<"-------------------------\n"<<endl;
for(int j=8;j<=22;++j){
cout<<map[i][j]<<" ";
}
cout<<endl;
}
// int price;
//
// int s,tt;
// cin>>s>>tt;
//// cout<<s<<" -> "<<tt<<" = "<<map[s][tt]<<endl;
// int ss[1000];
// int ttt[1000];
// getchar();
// //工厂
// for(int i=1;i<=s;++i){
// cin>>ss[i];
// }//目标火车站
// getchar();
// for(int i=1;i<=tt;++i){
// cin>>ttt[i];
// }
// for(int i=1;i<=s;++i){
// for(int j=1;j<=tt;++j){
// cout<<ss[i]<<" -> "<<ttt[j]<<" = "<<map[ss[i]][ttt[j]]<<endl;
// }
// cout<<"\n--------------------------------\n";
// }
return 0;
/*
24 23
P1 P3 450
P2 P3 80
P3 P4 1150
P4 P8 1100
P5 P6 306
P6 P7 195
S1 P7 20
S1 P8 202
P8 P9 720
S2 P8 1200
P3 P9 690
P9 P10 520
P10 P11 170
P11 P12 88
S5 P12 462
S4 P11 690
P11 14 160
P14 P13 70
P14 P15 320
P15 P16 160
S6 P16 70
P16 P17 290
P17 S7 30
7 17
8 22 23 24 21 18 14
1 3 5 6 7 8 10 11 13 16 17 18 19 20 21 9 4
*/
/*
32 31
P1 A2 3
P2 A3 2
P4 A4 600
P5 A5 10
P6 A6 5
P7 A7 10
S1 A7 31
P8 A8 12
P9 A9 42
P10 A10 70
P12 A11 10
P13 A12 10
P15 A13 62
S6 A14 110
P16 A14 30
P17 A15 20
S7 A15 20
A1 A2 104
A2 A3 301
A3 A4 750
A4 A5 606
A5 A6 194
A6 A7 205
A7 A8 201
A8 A9 680
A9 A10 480
A10 A11 300
A11 A12 220
A12 A13 210
A13 A14 420
A14 A15 500
17 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
*/
/*
39 54
P1 P3 450
P2 P3 80
P3 P4 1150
P4 P8 1100
P5 P6 306
P6 P7 195
S1 P7 20
S1 P8 202
P8 P9 720
S2 P8 1200
S3 P9 690
P9 P10 520
P10 P11 170
P11 P12 88
S5 P12 462
S4 P11 690
P11 P14 160
P14 P13 70
P14 P15 320
P15 P16 160
S6 P16 70
P16 P17 290
P17 S7 30
P1 A2 3
P2 A3 2
P4 A4 600
P5 A5 10
P6 A6 5
P7 A7 10
S1 A7 31
P8 A8 12
P9 A9 42
P10 A10 70
P12 A11 10
P13 A12 10
P15 A13 62
S6 A14 110
P16 A14 30
P17 A15 20
S7 A15 20
A1 A2 104
A2 A3 301
A3 A4 750
A4 A5 606
A5 A6 194
A6 A7 205
A7 A8 201
A8 A9 680
A9 A10 480
A10 A11 300
A11 A12 220
A12 A13 210
A13 A14 420
A14 A15 500
*/
}