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

質問編集履歴

1

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

2019/11/29 13:53

投稿

ro_tose
ro_tose

スコア8

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
- n=51;
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
- srand((unsigned)time(NULL));
50
+ srand((unsigned)time(NULL));
44
51
 
45
- rn=rand()%n;
52
+ rn=rand()%n;
46
53
 
47
54
 
48
55
  visited[rn]=1;
49
56
 
50
- tour[step]=rn;
57
+ tour[step]=rn;
51
58
 
52
- while(step<n-1){
59
+ while(step<n-1){
53
- step++;
60
+ step++;
54
- for(i=0;i<n;i++){
61
+ for(i=0;i<n;i++){
55
62
 
56
- pro[i]=0;
63
+ pro[i]=0;
57
- if(visited[i]){
64
+ if(visited[i]){
58
- }
65
+ }
59
- else{
66
+ else{
60
- pro[i]=1;
67
+ pro[i]=1;
61
- sm_pro +=pro[i];
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
- for(i=0;i<n;i++){
86
+ for(i=0;i<n;i++){
82
- printf("i=%d tour=%d visited=%d\n",i,tour[i],visited[i]);
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
  ```