teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記2

2021/08/07 08:34

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -16,4 +16,60 @@
16
16
 
17
17
  **追記**
18
18
  よく考えたら、マップは読み込む必要はありませんね。
19
- N と各数字の座標を憶えておくだけで済みます。
19
+ N と各数字の座標を憶えておくだけで済みます。
20
+
21
+ **追記2**
22
+ 距離を求める部分は示しますので、ソートは自分でやってください。
23
+ ```C++
24
+ #include <iostream>
25
+ #include <vector>
26
+ #include <cstdlib> // abs
27
+ using namespace std;
28
+
29
+ struct X {
30
+ char c;
31
+ int x, y;
32
+ int dist; // N からの距離
33
+
34
+ X(int c, int x, int y) : c(c), x(x), y(y) { }
35
+ };
36
+
37
+ int main()
38
+ {
39
+ int H, W;
40
+ cin >> H >> W;
41
+ vector<X> v;
42
+ int n = 0;
43
+ for (int i = 0; i < H; i++) {
44
+ for (int j = 0; j < W; j++) {
45
+ char c;
46
+ cin >> c;
47
+ if (c != '#') {
48
+ if (c == 'N') n = v.size();
49
+ v.push_back(X(c, i, j));
50
+ }
51
+ }
52
+ }
53
+ for (int i = 0; i < v.size(); i++) {
54
+ v[i].dist = abs(v[i].x - v[n].x) + abs(v[i].y - v[n].y);
55
+ cout << v[i].c << " (" << v[i].x << ", " << v[i].y << ") "
56
+ << v[i].dist << endl;
57
+ }
58
+ }
59
+ ```
60
+ 実行結果
61
+ ```text
62
+ 5 7
63
+ ######4
64
+ #######
65
+ ##1#N##
66
+ ##2####
67
+ #3#####
68
+ 4 (0, 6) 4
69
+ 1 (2, 2) 2
70
+ N (2, 4) 0
71
+ 2 (3, 2) 3
72
+ 3 (4, 1) 5
73
+ ```
74
+ もちろん、このコードは参考になるかもしれないものであり、
75
+ 距離を求めるところを自分で考えてみてもよいでしょう。

1

追記

2021/08/07 08:34

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -12,4 +12,8 @@
12
12
  a[4][1] = '3'
13
13
 
14
14
  'N' から '4' までの距離は |0-2| + |6-4| = 4
15
- 絶対値は abs関数が使えます。
15
+ 絶対値は abs関数が使えます。
16
+
17
+ **追記**
18
+ よく考えたら、マップは読み込む必要はありませんね。
19
+ N と各数字の座標を憶えておくだけで済みます。