/*前の記事の続き。ソースコードが840行もあるから、具体的な実行例はまた明日。*/
![](https://blogimg.goo.ne.jp/user_image/4e/e2/fa8cf5210399a46d218fbf11f5b3cc43.jpg)
/*おわり*/
![](https://blogimg.goo.ne.jp/user_image/4e/e2/fa8cf5210399a46d218fbf11f5b3cc43.jpg)
void exception(void) /*ルート展開のあと1回だけ呼び出す。状態遷移を網羅するためあと3つ展開する*/ { struct node *leaf; char i,j,k,l; leaf=(struct node *)malloc(sizeof(struct node)*3); if(!leaf){ printf("メモリ割り当てエラー\a\n"); exit(1); } endleaf.revleaf->nextleaf=&leaf[0]; leaf[0].revleaf=endleaf.revleaf; leaf[0].nextleaf=&leaf[1]; leaf[1].revleaf=&leaf[0]; leaf[1].nextleaf=&leaf[2]; leaf[2].revleaf=&leaf[1]; leaf[2].nextleaf=&endleaf; endleaf.revleaf=&leaf[2]; nodeend.revnode->nodelist=&leaf[0]; leaf[0].nodelist=&leaf[1]; leaf[1].nodelist=&leaf[2]; leaf[2].nodelist=&nodeend; nodeend.revnode=&leaf[2]; for(i=0;i<3;i++){
nextleaf){ if(min>leaf->expectation){ min=leaf->expectation; /*リーフリストをたどってheuristic+costが最小のものを探す*/ minG=leaf; } leaf=leaf->nextleaf; } } void output(void) /*解を表示*/ { char *buf; unsigned int i; buf=(char *)malloc(sizeof(char)*min*2); if(!buf){ printf("メモリ割り当てエラー\a\n"); exit(1); } for(i=0;i<min;i++){ /*親ノードをたどっていって遷移の履歴を読む*/
ope; buf[min+i]=minG->opecolor; minG=minG->reverse; } printf("\n\n %d 手で完成\n\n\a",min); for(i=min;i;i--) switch(buf[i-1]){ /*解法を表示する*/ case 0: printf(" %c 面を: 180°回転\n",buf[min+i-1]); break; case 1: printf(" %c 面を: 90°右に回転\n",buf[min+i-1]); break; case -1: printf(" %c 面を: 左に 90°回転\n",buf[min+i-1]); }; free(buf); }
/*おわり*/
※コメント投稿者のブログIDはブログ作成者のみに通知されます