回答編集履歴

2

追記2

2021/08/07 08:34

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -35,3 +35,115 @@
35
35
  よく考えたら、マップは読み込む必要はありませんね。
36
36
 
37
37
  N と各数字の座標を憶えておくだけで済みます。
38
+
39
+
40
+
41
+ **追記2**
42
+
43
+ 距離を求める部分は示しますので、ソートは自分でやってください。
44
+
45
+ ```C++
46
+
47
+ #include <iostream>
48
+
49
+ #include <vector>
50
+
51
+ #include <cstdlib> // abs
52
+
53
+ using namespace std;
54
+
55
+
56
+
57
+ struct X {
58
+
59
+ char c;
60
+
61
+ int x, y;
62
+
63
+ int dist; // N からの距離
64
+
65
+
66
+
67
+ X(int c, int x, int y) : c(c), x(x), y(y) { }
68
+
69
+ };
70
+
71
+
72
+
73
+ int main()
74
+
75
+ {
76
+
77
+ int H, W;
78
+
79
+ cin >> H >> W;
80
+
81
+ vector<X> v;
82
+
83
+ int n = 0;
84
+
85
+ for (int i = 0; i < H; i++) {
86
+
87
+ for (int j = 0; j < W; j++) {
88
+
89
+ char c;
90
+
91
+ cin >> c;
92
+
93
+ if (c != '#') {
94
+
95
+ if (c == 'N') n = v.size();
96
+
97
+ v.push_back(X(c, i, j));
98
+
99
+ }
100
+
101
+ }
102
+
103
+ }
104
+
105
+ for (int i = 0; i < v.size(); i++) {
106
+
107
+ v[i].dist = abs(v[i].x - v[n].x) + abs(v[i].y - v[n].y);
108
+
109
+ cout << v[i].c << " (" << v[i].x << ", " << v[i].y << ") "
110
+
111
+ << v[i].dist << endl;
112
+
113
+ }
114
+
115
+ }
116
+
117
+ ```
118
+
119
+ 実行結果
120
+
121
+ ```text
122
+
123
+ 5 7
124
+
125
+ ######4
126
+
127
+ #######
128
+
129
+ ##1#N##
130
+
131
+ ##2####
132
+
133
+ #3#####
134
+
135
+ 4 (0, 6) 4
136
+
137
+ 1 (2, 2) 2
138
+
139
+ N (2, 4) 0
140
+
141
+ 2 (3, 2) 3
142
+
143
+ 3 (4, 1) 5
144
+
145
+ ```
146
+
147
+ もちろん、このコードは参考になるかもしれないものであり、
148
+
149
+ 距離を求めるところを自分で考えてみてもよいでしょう。

1

追記

2021/08/07 08:34

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -27,3 +27,11 @@
27
27
  'N' から '4' までの距離は |0-2| + |6-4| = 4
28
28
 
29
29
  絶対値は abs関数が使えます。
30
+
31
+
32
+
33
+ **追記**
34
+
35
+ よく考えたら、マップは読み込む必要はありませんね。
36
+
37
+ N と各数字の座標を憶えておくだけで済みます。