質問編集履歴
1
文法を修正して、アルゴリズムについて書かせていただきました
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
51個の都市すべてを回る巡回路を生成して、移動した場所に足跡を残したい。
|
3
3
|
|
4
|
+
アルゴリズムとしては
|
5
|
+
1:全ての都市を未訪問にする。
|
6
|
+
2:ランダムな一都市に巡回する対象を配置する。
|
7
|
+
3:未訪問な都市の中から確率pro[i]で都市を選択して移動する。
|
8
|
+
4:すべての都市を巡回するまで3を繰り返す。
|
9
|
+
5:最初に配置された都市に帰ってくる。
|
10
|
+
というのを考えています。
|
4
11
|
### 発生している問題・エラーメッセージ
|
5
12
|
|
6
13
|
```
|
@@ -21,7 +28,7 @@
|
|
21
28
|
int main(void)
|
22
29
|
{
|
23
30
|
int i;
|
24
|
-
int step;
|
31
|
+
int step;
|
25
32
|
int rn;
|
26
33
|
double pro[51];
|
27
34
|
double sm_pro;
|
@@ -33,55 +40,53 @@
|
|
33
40
|
|
34
41
|
step=0;
|
35
42
|
|
36
|
-
|
43
|
+
n=51;
|
37
44
|
sm_pro=0;
|
38
45
|
|
39
|
-
for(i=0;i<n;i++){
|
46
|
+
for(i=0;i<n;i++){
|
40
|
-
visited[i]=0;
|
47
|
+
visited[i]=0;
|
41
|
-
}
|
48
|
+
}
|
42
49
|
|
43
|
-
|
50
|
+
srand((unsigned)time(NULL));
|
44
51
|
|
45
|
-
|
52
|
+
rn=rand()%n;
|
46
53
|
|
47
54
|
|
48
55
|
visited[rn]=1;
|
49
56
|
|
50
|
-
|
57
|
+
tour[step]=rn;
|
51
58
|
|
52
|
-
while(step<n-1){
|
59
|
+
while(step<n-1){
|
53
|
-
step++;
|
60
|
+
step++;
|
54
|
-
|
61
|
+
for(i=0;i<n;i++){
|
55
62
|
|
56
|
-
|
63
|
+
pro[i]=0;
|
57
|
-
|
64
|
+
if(visited[i]){
|
58
|
-
|
65
|
+
}
|
59
|
-
|
66
|
+
else{
|
60
|
-
|
67
|
+
pro[i]=1;
|
61
|
-
|
68
|
+
sm_pro +=pro[i];
|
69
|
+
}
|
70
|
+
}
|
71
|
+
i=0;
|
72
|
+
rnd=(double)rand()/RAND_MAX;
|
73
|
+
rnd *=sm_pro;
|
74
|
+
sm_sol=0;
|
75
|
+
while(sm_sol<=rnd){
|
76
|
+
i++;
|
77
|
+
sm_sol+=pro[i];
|
78
|
+
}
|
79
|
+
tour[step]=i;
|
80
|
+
visited[i]=1;
|
62
81
|
}
|
63
|
-
}
|
64
|
-
i=0;
|
65
82
|
|
66
|
-
srand(time(NULL));
|
67
|
-
rnd=(double)rand()/RAND_MAX;
|
68
|
-
rnd *=sm_pro;
|
69
|
-
sm_sol=0;
|
70
|
-
while(sm_sol<=rnd){
|
71
|
-
i++;
|
72
|
-
sm_sol+=pro[i];
|
73
|
-
}
|
74
|
-
tour[step]=i;
|
75
|
-
visited[i]=1;
|
76
|
-
}
|
77
83
|
|
84
|
+
tour[51]=tour[0];
|
78
85
|
|
79
|
-
tour[51]=tour[0];
|
80
|
-
|
81
|
-
|
86
|
+
for(i=0;i<n;i++){
|
82
|
-
|
87
|
+
printf("i=%d tour=%d visited=%d\n",i,tour[i],visited[i]);
|
83
|
-
|
88
|
+
}
|
84
|
-
printf("tour=%d",tour[n]);
|
89
|
+
printf("tour=%d",tour[n]);
|
85
90
|
}
|
86
91
|
|
87
92
|
```
|