-
Notifications
You must be signed in to change notification settings - Fork 1
/
1321_Robot.cpp
104 lines (93 loc) · 2.41 KB
/
1321_Robot.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
// Problem#: 1321
// Submission#: 1206268
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Point{
int value;
int color;
}All[101][101];
int fuel[101][101];
struct zuobiao{
int x;
int y;
};
zuobiao move[4];
queue<zuobiao> orth;
void dijk()
{
move[0].x = 1;
move[0].y = 0;
move[1].x = -1;
move[1].y = 0;
move[2].x = 0;
move[2].y = 1;
move[3].x = 0;
move[3].y = -1;
int col,row;
cin >> row >> col;
for(int i = 0;i < 101;i ++)
{
for(int j = 0;j < 101;j ++)
{
All[i][j].color = 3;
}
}
for(int i = 1;i <= row;i++)
{
for(int j = 1;j <= col;j ++)
{
All[i][j].value = 99999999;
All[i][j].color = 0;
cin >> fuel[i][j];
}
}
zuobiao start;
zuobiao end;
cin >> start.x >> start.y;
cin >> end.x >> end.y;
All[start.x][start.y].color = 1;
All[start.x][start.y].value = fuel[start.x][start.y];
orth.push(start);
while(!orth.empty()){
zuobiao temp;
temp = orth.front();
All[temp.x][temp.y].color = 2;
orth.pop();
zuobiao new_one;
for(int i = 0;i < 4;i ++)
{
new_one.x = temp.x + move[i].x;
new_one.y = temp.y + move[i].y;
if(All[new_one.x][new_one.y].color == 3)continue;
if(All[new_one.x][new_one.y].value > All[temp.x][temp.y].value + fuel[new_one.x][new_one.y])
{
All[new_one.x][new_one.y].value = All[temp.x][temp.y].value + fuel[new_one.x][new_one.y];
All[new_one.x][new_one.y].color = 1;
orth.push(new_one);
}
}
}
/*for(int i = 1;i <= row;i ++)
{
for(int j = 1;j <= col;j ++)
{
cout << All[i][j].value << " ";
}
cout << endl;
}*/
cout << All[end.x][end.y].value << endl;
}
int main()
{
int n;
cin >> n;
for(int i = 0;i < n;i ++)
{
dijk();
}
}