改め Objective Technician

はぐれ技術者のやりたい放題

ルービックキューブプログラム 続き3

2006-12-13 20:37:43 | プログラミング
/*前の記事の続き。ソースコードが840行もあるから、具体的な実行例はまた明日。*/












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);
}




/*おわり*/

最新の画像もっと見る

コメントを投稿