質問編集履歴

1

文法を修正して、アルゴリズムについて書かせていただきました

2019/11/29 13:53

投稿

ro_tose
ro_tose

スコア8

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,20 @@
3
3
  51個の都市すべてを回る巡回路を生成して、移動した場所に足跡を残したい。
4
4
 
5
5
 
6
+
7
+ アルゴリズムとしては
8
+
9
+ 1:全ての都市を未訪問にする。
10
+
11
+ 2:ランダムな一都市に巡回する対象を配置する。
12
+
13
+ 3:未訪問な都市の中から確率pro[i]で都市を選択して移動する。
14
+
15
+ 4:すべての都市を巡回するまで3を繰り返す。
16
+
17
+ 5:最初に配置された都市に帰ってくる。
18
+
19
+ というのを考えています。
6
20
 
7
21
  ### 発生している問題・エラーメッセージ
8
22
 
@@ -44,7 +58,7 @@
44
58
 
45
59
  int i;
46
60
 
47
- int step;
61
+ int step;
48
62
 
49
63
  int rn;
50
64
 
@@ -68,25 +82,25 @@
68
82
 
69
83
 
70
84
 
71
- n=51;
85
+ n=51;
72
86
 
73
87
  sm_pro=0;
74
88
 
75
89
 
76
90
 
77
- for(i=0;i<n;i++){
91
+ for(i=0;i<n;i++){
78
92
 
79
- visited[i]=0;
93
+ visited[i]=0;
80
94
 
81
- }
95
+ }
82
96
 
83
97
 
84
98
 
85
- srand((unsigned)time(NULL));
99
+ srand((unsigned)time(NULL));
86
100
 
87
101
 
88
102
 
89
- rn=rand()%n;
103
+ rn=rand()%n;
90
104
 
91
105
 
92
106
 
@@ -96,75 +110,71 @@
96
110
 
97
111
 
98
112
 
99
- tour[step]=rn;
113
+ tour[step]=rn;
100
114
 
101
115
 
102
116
 
103
- while(step<n-1){
117
+ while(step<n-1){
104
118
 
105
- step++;
119
+ step++;
106
120
 
107
- for(i=0;i<n;i++){
121
+ for(i=0;i<n;i++){
108
122
 
109
123
 
110
124
 
111
- pro[i]=0;
125
+ pro[i]=0;
112
126
 
113
- if(visited[i]){
127
+ if(visited[i]){
114
128
 
115
- }
129
+ }
116
130
 
117
- else{
131
+ else{
118
132
 
119
- pro[i]=1;
133
+ pro[i]=1;
120
134
 
121
- sm_pro +=pro[i];
135
+ sm_pro +=pro[i];
136
+
137
+ }
138
+
139
+ }
140
+
141
+ i=0;
142
+
143
+ rnd=(double)rand()/RAND_MAX;
144
+
145
+ rnd *=sm_pro;
146
+
147
+ sm_sol=0;
148
+
149
+ while(sm_sol<=rnd){
150
+
151
+ i++;
152
+
153
+ sm_sol+=pro[i];
154
+
155
+ }
156
+
157
+ tour[step]=i;
158
+
159
+ visited[i]=1;
122
160
 
123
161
  }
124
-
125
- }
126
-
127
- i=0;
128
-
129
-
130
-
131
- srand(time(NULL));
132
-
133
- rnd=(double)rand()/RAND_MAX;
134
-
135
- rnd *=sm_pro;
136
-
137
- sm_sol=0;
138
-
139
- while(sm_sol<=rnd){
140
-
141
- i++;
142
-
143
- sm_sol+=pro[i];
144
-
145
- }
146
-
147
- tour[step]=i;
148
-
149
- visited[i]=1;
150
-
151
- }
152
162
 
153
163
 
154
164
 
155
165
 
156
166
 
157
- tour[51]=tour[0];
167
+ tour[51]=tour[0];
158
168
 
159
169
 
160
170
 
161
- for(i=0;i<n;i++){
171
+ for(i=0;i<n;i++){
162
172
 
163
- printf("i=%d tour=%d visited=%d\n",i,tour[i],visited[i]);
173
+ printf("i=%d tour=%d visited=%d\n",i,tour[i],visited[i]);
164
174
 
165
- }
175
+ }
166
176
 
167
- printf("tour=%d",tour[n]);
177
+ printf("tour=%d",tour[n]);
168
178
 
169
179
  }
170
180