前提・実現したいこと
51個の都市すべてを回る巡回路を生成して、移動した場所に足跡を残したい。
アルゴリズムとしては
1:全ての都市を未訪問にする。
2:ランダムな一都市に巡回する対象を配置する。
3:未訪問な都市の中から確率pro[i]で都市を選択して移動する。
4:すべての都市を巡回するまで3を繰り返す。
5:最初に配置された都市に帰ってくる。
というのを考えています。
発生している問題・エラーメッセージ
すべての都市を巡回せず、存在しないはずの都市を訪れている。
該当のソースコード
C言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#include <time.h> 5 6 7 8 9int main(void) 10{ 11 int i; 12 int step; 13 int rn; 14 double pro[51]; 15 double sm_pro; 16 double rnd; 17 double sm_sol; 18 int visited[51]; 19 int tour[52]; 20 int n; 21 22 step=0; 23 24 n=51; 25 sm_pro=0; 26 27 for(i=0;i<n;i++){ 28 visited[i]=0; 29 } 30 31 srand((unsigned)time(NULL)); 32 33 rn=rand()%n; 34 35 36 visited[rn]=1; 37 38 tour[step]=rn; 39 40 while(step<n-1){ 41 step++; 42 for(i=0;i<n;i++){ 43 44 pro[i]=0; 45 if(visited[i]){ 46 } 47 else{ 48 pro[i]=1; 49 sm_pro +=pro[i]; 50 } 51 } 52 i=0; 53 rnd=(double)rand()/RAND_MAX; 54 rnd *=sm_pro; 55 sm_sol=0; 56 while(sm_sol<=rnd){ 57 i++; 58 sm_sol+=pro[i]; 59 } 60 tour[step]=i; 61 visited[i]=1; 62 } 63 64 65 tour[51]=tour[0]; 66 67 for(i=0;i<n;i++){ 68 printf("i=%d tour=%d visited=%d\n",i,tour[i],visited[i]); 69 } 70 printf("tour=%d",tour[n]); 71} 72
試したこと
式を見直してみたりしたり少しいじったりしたのですがどうにも想定した値を出してくれません。
回答2件
あなたの回答
tips
プレビュー