Last active
August 6, 2020 11:25
-
-
Save reireias/863ef109f23fb7eb0d2fa378e690aff4 to your computer and use it in GitHub Desktop.
箱入り娘パズルの最小手を求めるプログラム(C言語)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 約9年前の学生時代に実装した内容 | |
// これを24時間以内に仕上げたらしい | |
/** | |
+----+ +-----------+ +----+ | |
| 父 | | | | 母 | | |
| | | 箱 入 | | | | |
| | | り 娘 | | | | |
| 親 | | | | 親 | | |
+----+ +-----------+ +----+ | |
+----+ +-----------+ +----+ | |
| 祖 | | 兄 弟 | | 祖 | | |
| | +-----------+ | | | |
| | +----+ +----+ | | | |
| 父 | | 華 | | 書 | | 母 | | |
+----+ +----+ +----+ +----+ | |
+----+ +----+ | |
| 琴 | | 茶 | | |
+----+ +----+ | |
**/ | |
#include<stdio.h> | |
#include<string.h> | |
#include<stdlib.h> | |
//初期配置 | |
int first[5][4]={ | |
{3,2,2,3}, | |
{4,2,2,4}, | |
{3,5,5,3}, | |
{4,1,1,4}, | |
{1,0,0,1} | |
}; | |
int x[5][4];//現在の状態 | |
int y[5][4]; | |
char con[32];//現在の状態の文字列 | |
int end_flag=0;//解が見つかったか | |
char solution[200][32];//最後の出力に使う | |
//状態記憶木、二分木に使用 | |
struct mtree{ | |
char data[32]; | |
int hand;//今何手目か | |
struct mtree* parent;//前の手はどれかを格納。二分木の親ではない。 | |
struct mtree* left;//二分木の左 | |
struct mtree* right; | |
struct mtree* next;//キューの次 | |
}; | |
struct mtree *root;//根 | |
struct mtree *now;//現在の手 | |
struct mtree *q_first;//キューの最初 | |
struct mtree *q_last;//キューの最後 | |
struct mtree *kai;//解のポインタ | |
void condition(int array[5][4]){//状態を文字列に変換する関数,文字列conに現在の状態が記述される | |
int i,j; | |
int k=0; | |
char* r=""; | |
strcpy(con,""); | |
for(i=0;i<5;i++){ | |
for(j=0;j<4;j++){ | |
con[k]=(char)(array[i][j]+48); | |
k++; | |
} | |
} | |
//printf("\n%s\n",con); | |
} | |
void reverse_con(char *str){//状態を表す文字列から配列yに復元する関数 | |
int i,j,k; | |
k=0; | |
for(i=0;i<5;i++){ | |
for(j=0;j<4;j++){ | |
y[i][j]=(int)str[k]-48; | |
k++; | |
} | |
} | |
} | |
struct mtree * add_tree(struct mtree *p,char *str){//二分木追加関数 | |
struct mtree *q; | |
//printf("%s\n",str); | |
q=(struct mtree *)malloc(sizeof(struct mtree)); | |
if( q == NULL ){ | |
fprintf( stderr, "Out of Memory\n" ); | |
exit( EXIT_FAILURE ); | |
} | |
strcpy(q->data,str); | |
q->hand=now->hand+1; | |
q->parent=now; | |
q->left=NULL; | |
q->right=NULL; | |
q->next=NULL; | |
q_last->next=q; | |
q_last=q; | |
if(str[17]=='2'&&str[18]=='2'){ | |
end_flag=1; | |
kai=q; | |
} | |
return q; | |
} | |
struct mtree * find_tree(struct mtree *p,char *str){//二分木探索関数 | |
if(p==NULL){ | |
printf("p=NULL\n"); | |
return 0; | |
} | |
if(strcmp(str,p->data)==0){ | |
//printf("同じ物発見\n"); | |
return 0; | |
}else if(strcmp(str,p->data)<0){ | |
if(p->left!=NULL){ | |
find_tree(p->left,str); | |
}else{ | |
p->left=add_tree(p->left,str); | |
} | |
}else{ | |
if(p->right!=NULL){ | |
find_tree(p->right,str); | |
}else{ | |
p->right=add_tree(p->right,str); | |
} | |
} | |
return 0; | |
} | |
void next_hand(int array[5][4]){//次の手を探す関数 | |
int i,j,k,l; | |
int zero1[2],zero2[2];//0の位置を記憶する配列 | |
int next_array[5][4];//変化後の配列 | |
zero1[0]=-1;//zero1に座標が入ったかどうかの判定に使う | |
//next_array[][]をとりあえず現在の手の形にする | |
for(i=0;i<5;i++){ | |
for(j=0;j<4;j++){ | |
next_array[i][j]=array[i][j]; | |
} | |
} | |
//値が0の座標を探す | |
for(i=0;i<5;i++){ | |
for(j=0;j<4;j++){ | |
if(array[i][j]==0&&zero1[0]==-1){ | |
zero1[0]=i; | |
zero1[1]=j; | |
}else if(array[i][j]==0&&zero1[-1]!=-1){ | |
zero2[0]=i; | |
zero2[1]=j; | |
} | |
} | |
} | |
//printf("zero1=x[%d][%d]\nzero2=x[%d][%d]\n",zero1[0],zero1[1],zero2[0],zero2[1]); | |
//1個目の0について | |
i=zero1[0]; | |
j=zero1[1]; | |
//特殊パターン(L字移動)+2マス移動の処理 | |
if(i!=4&&array[i+1][j]==0){//下が0 | |
if(j!=3&&array[i][j+1]==1){//右が1 | |
next_array[i+1][j]=1; | |
next_array[i][j+1]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j!=0&&array[i][j-1]==1){//左が1 | |
next_array[i+1][j]=1; | |
next_array[i][j-1]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j!=3&&array[i+1][j+1]==1){//右下が1 | |
next_array[i][j]=1; | |
next_array[i+1][j+1]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j!=0&&array[i+1][j-1]==1){//左下が1 | |
next_array[i][j]=1; | |
next_array[i+1][j-1]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i!=0&&array[i-1][j]==1){//上が1 | |
next_array[i-1][j]=0; | |
next_array[i+1][j]=1; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i>1&&array[i-1][j]==4){//上が4 | |
next_array[i-2][j]=0; | |
next_array[i-1][j]=0; | |
next_array[i][j]=3; | |
next_array[i+1][j]=4; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i<3&&array[i+2][j]==1){//下が1 | |
next_array[i][j]=1; | |
next_array[i+2][j]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i<3&&array[i+2][j]==3){//下が3 | |
next_array[i][j]=3; | |
next_array[i+1][j]=4; | |
next_array[i+2][j]=0; | |
next_array[i+3][j]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
} | |
if(j!=3&&array[i][j+1]==0){//右が0 | |
if(i!=0&&array[i-1][j]==1){//上が1 | |
next_array[i][j+1]=1; | |
next_array[i-1][j]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i!=4&&array[i+1][j]==1){//下が1 | |
next_array[i][j+1]=1; | |
next_array[i+1][j]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i!=0&&array[i-1][j+1]==1){//右上が1 | |
next_array[i][j]=1; | |
next_array[i-1][j+1]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(i!=4&&array[i+1][j+1]==1){//右下が1 | |
next_array[i][j]=1; | |
next_array[i+1][j+1]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j!=0&&array[i][j-1]==1){//左が1 | |
next_array[i][j-1]=0; | |
next_array[i][j+1]=1; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j!=0&&array[i][j-1]==5){//左が5 | |
next_array[i][j-2]=0; | |
next_array[i][j-1]=0; | |
next_array[i][j]=5; | |
next_array[i][j+1]=5; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j<2&&array[i][j+2]==1){//右が1 | |
next_array[i][j]=1; | |
next_array[i][j+2]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
if(j<2&&array[i][j+2]==5){//右が5 | |
next_array[i][j]=5; | |
next_array[i][j+1]=5; | |
next_array[i][j+2]=0; | |
next_array[i][j+3]=0; | |
condition(next_array); | |
find_tree(root,con); | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
} | |
} | |
//上を見る | |
if(i!=0){ | |
switch(array[i-1][j]){ | |
case 0:break; | |
case 1:next_array[i][j]=1; | |
next_array[i-1][j]=0; | |
break; | |
case 2:if(j!=3&&array[i][j+1]==0&&array[i-1][j+1]==2){ | |
next_array[i][j]=2; | |
next_array[i][j+1]=2; | |
next_array[i-2][j]=0; | |
next_array[i-2][j+1]=0; | |
}else if(j!=0&&array[i][j-1]==0&&array[i-1][j-1]==2){ | |
next_array[i][j]=2; | |
next_array[i][j-1]=2; | |
next_array[i-2][j]=0; | |
next_array[i-2][j-1]=0; | |
} | |
break; | |
case 3:break; | |
case 4:next_array[i-2][j]=0; | |
next_array[i-1][j]=3; | |
next_array[i][j]=4; | |
break; | |
case 5: if(j!=3&&array[i][j+1]==0&&array[i-1][j+1]==5){ | |
next_array[i][j]=5; | |
next_array[i][j+1]=5; | |
next_array[i-1][j]=0; | |
next_array[i-1][j+1]=0; | |
}else if(j!=0&&array[i][j-1]==0&&array[i-1][j-1]==5){ | |
next_array[i][j]=5; | |
next_array[i][j-1]=5; | |
next_array[i-1][j]=0; | |
next_array[i-1][j-1]=0; | |
} | |
break; | |
default:break; | |
} | |
} | |
//移動があったならば木へぶち込む | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\ntop\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//下を見る | |
if(i!=4){ | |
switch(array[i+1][j]){ | |
case 0: break; | |
case 1:next_array[i][j]=1; | |
next_array[i+1][j]=0; | |
break; | |
case 2:if(j!=3&&array[i][j+1]==0&&array[i+1][j+1]==2){ | |
next_array[i][j]=2; | |
next_array[i][j+1]=2; | |
next_array[i+2][j]=0; | |
next_array[i+2][j+1]=0; | |
}else if(j!=0&&array[i][j-1]==0&&array[i+1][j-1]==2){ | |
next_array[i][j]=2; | |
next_array[i][j-1]=2; | |
next_array[i+2][j]=0; | |
next_array[i+2][j-1]=0; | |
} | |
break; | |
case 3:next_array[i][j]=3; | |
next_array[i+1][j]=4; | |
next_array[i+2][j]=0; | |
break; | |
case 4:break; | |
case 5: if(j!=3&&array[i][j+1]==0&&array[i+1][j+1]==5){ | |
next_array[i][j]=5; | |
next_array[i][j+1]=5; | |
next_array[i+1][j]=0; | |
next_array[i+1][j+1]=0; | |
}else if(j!=0&&array[i][j-1]==0&&array[i+1][j-1]==5){ | |
next_array[i][j]=5; | |
next_array[i][j-1]=5; | |
next_array[i+1][j]=0; | |
next_array[i+1][j-1]=0; | |
} | |
break; | |
default:break; | |
} | |
} | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\ndown\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//左を見る | |
if(j!=0){ | |
switch(array[i][j-1]){ | |
case 0:break; | |
case 1:next_array[i][j]=1; | |
next_array[i][j-1]=0; | |
break; | |
case 2:if(i!=0&&array[i-1][j]==0&&array[i-1][j-1]==2){ | |
next_array[i][j]=2; | |
next_array[i-1][j]=2; | |
next_array[i][j-2]=0; | |
next_array[i-1][j-2]=0; | |
}else if(i!=4&&array[i+1][j]==0&&array[i+1][j-1]==2){ | |
next_array[i][j]=2; | |
next_array[i+1][j]=2; | |
next_array[i][j-2]=0; | |
next_array[i+1][j-2]=0; | |
} | |
break; | |
case 3:if(i!=4&&array[i+1][j]==0){ | |
next_array[i][j]=3; | |
next_array[i+1][j]=4; | |
next_array[i][j-1]=0; | |
next_array[i+1][j-1]=0; | |
} | |
break; | |
case 4:break; | |
case 5: next_array[i][j]=5; | |
next_array[i][j-2]=0; | |
break; | |
default:break; | |
} | |
} | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\nleft\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//右を見る | |
if(j!=3){ | |
switch(array[i][j+1]){ | |
case 0: break; | |
case 1:next_array[i][j]=1; | |
next_array[i][j+1]=0; | |
break; | |
case 2:if(i!=0&&array[i-1][j]==0&&array[i-1][j+1]==2){ | |
next_array[i][j]=2; | |
next_array[i-1][j]=2; | |
next_array[i][j+2]=0; | |
next_array[i-1][j+2]=0; | |
}else if(i!=4&&array[i+1][j]==0&&array[i+1][j+1]==2){ | |
next_array[i][j]=2; | |
next_array[i+1][j]=2; | |
next_array[i][j+2]=0; | |
next_array[i+1][j+2]=0; | |
} | |
break; | |
case 3:if(i!=4&&array[i+1][j]==0){ | |
next_array[i][j]=3; | |
next_array[i+1][j]=4; | |
next_array[i][j+1]=0; | |
next_array[i+1][j+1]=0; | |
} | |
break; | |
case 4:break; | |
case 5: next_array[i][j]=5; | |
next_array[i][j+2]=0; | |
break; | |
default:break; | |
} | |
} | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\nright\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//2個目の0について | |
i=zero2[0]; | |
j=zero2[1]; | |
//上を見る | |
if(i!=0){ | |
switch(array[i-1][j]){ | |
case 0:break; | |
case 1:next_array[i][j]=1; | |
next_array[i-1][j]=0; | |
break; | |
case 2:break; | |
case 3:break; | |
case 4:next_array[i-2][j]=0; | |
next_array[i-1][j]=3; | |
next_array[i][j]=4; | |
break; | |
case 5: break; | |
default:break; | |
} | |
} | |
//移動があったならば木へぶち込む | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\ntop\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//下を見る | |
if(i!=4){ | |
switch(array[i+1][j]){ | |
case 0:break; | |
case 1:next_array[i][j]=1; | |
next_array[i+1][j]=0; | |
break; | |
case 2: break; | |
case 3:next_array[i][j]=3; | |
next_array[i+1][j]=4; | |
next_array[i+2][j]=0; | |
break; | |
case 4:break; | |
case 5: break; | |
default:break; | |
} | |
} | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\ndown\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//左を見る | |
if(j!=0){ | |
switch(array[i][j-1]){ | |
case 0:break; | |
case 1:next_array[i][j]=1; | |
next_array[i][j-1]=0; | |
break; | |
case 2: break; | |
case 3: break; | |
case 4:break; | |
case 5: next_array[i][j]=5; | |
next_array[i][j-2]=0; | |
break; | |
default:break; | |
} | |
} | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
/* | |
//デバッグ出力 | |
printf("\nleft\n"); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",next_array[k][l]); | |
} | |
printf("\n"); | |
}*/ | |
//next_arrayをもとに戻す | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
next_array[k][l]=array[k][l]; | |
} | |
} | |
//右を見る | |
if(j!=3){ | |
switch(array[i][j+1]){ | |
case 0:break; | |
case 1:next_array[i][j]=1; | |
next_array[i][j+1]=0; | |
break; | |
case 2: break; | |
case 3: break; | |
case 4:break; | |
case 5: next_array[i][j]=5; | |
next_array[i][j+2]=0; | |
break; | |
default:break; | |
} | |
} | |
if(next_array[i][j]!=array[i][j]){ | |
condition(next_array); | |
find_tree(root,con); | |
} | |
} | |
void print_tree(struct mtree *p){ | |
printf("%s\t%d\t%s\t%s\t%s\t%s\n",p->data,p->hand,p->parent->data,p->left->data,p->right->data,p->next->data); | |
if(p->left!=NULL){ | |
print_tree(p->left); | |
} | |
if(p->right!=NULL){ | |
print_tree(p->right); | |
} | |
} | |
void print_kai(struct mtree *r){//解の順序を出力する関数 | |
printf("%d\t%s\n",r->hand,r->data); | |
strcpy(solution[r->hand],r->data); | |
if(r->parent!=NULL){ | |
print_kai(r->parent); | |
} | |
} | |
void print_array(char *str){//図を出力する関数 | |
int k,l; | |
reverse_con(str); | |
for(k=0;k<5;k++){ | |
for(l=0;l<4;l++){ | |
printf("%d ",y[k][l]); | |
} | |
printf("\n"); | |
} | |
printf("\n"); | |
} | |
int main(){ | |
int i,j; | |
char s[32]; | |
for(i=0;i<5;i++){ | |
for(j=0;j<4;j++){ | |
x[i][j]=first[i][j]; | |
} | |
} | |
condition(x); | |
root=malloc(sizeof(struct mtree)); | |
strcpy(root->data,con); | |
root->hand=0; | |
root->parent=NULL; | |
root->left=NULL; | |
root->right=NULL; | |
root->next=NULL; | |
now=root; | |
q_first=root; | |
q_last=root; | |
//キューの最初を処理する | |
i=0; | |
while(end_flag==0){ | |
//while(now->hand<2){ | |
now=q_first; | |
reverse_con(q_first->data); | |
next_hand(y); | |
q_first=now->next; | |
i++; | |
//printf("hand=%d\n",now->hand); | |
//print_array(now->data); | |
} | |
if(end_flag==1){ | |
printf("success!\n"); | |
printf("%s\t%d\n",kai->data,kai->hand); | |
print_kai(kai); | |
} | |
//printf("%d\n",i); | |
for(i=0;i<82;i++){ | |
//printf("%s\n",solution[i]); | |
print_array(solution[i]); | |
} | |
//printf("[root]\n%s\nhand:%d\n",root->data,root->hand); | |
//find_tree(root,"32234224355341141001"); | |
//find_tree(root,"32234224355341141002"); | |
//printf("%s\n",now->data); | |
//printf("%s\n",root->right->data); | |
//printf("data\thand\tparent\tleft\tright\tnext\n"); | |
//print_tree(root); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment