📄 nine.txt
字号:
///////////////////////////////////////// 九宫图算法;//////////////////////////////////////#include<stdio.h>#include<time.h>#include<stdlib.h>////////////////////////////////////// the function defination//////////////////////////////////void create(int [][3]);void show(int [][3]);void set_value(int [][3]);void aim_get(int [][3]);void target(int [][3]);void judge_x1(int [][3]);void judge_x2(int [][3]);void judge_x3(int [][3]);void judge_x4(int [][3]);void judge_x5(int [][3]);void shift_all(int [][3]);void shift_low_six(int [][3]);void anti_shift_all(int [][3]);void shift_low_four(int [][3]);void last_shift(int [][3]);void set_x5(int [][3]);///////////////////////////////////////////// the main function body ////////////////////////////////////////////main(){ srand(time(NULL)); int cDiagram[3][3]; create(cDiagram); /////// creat the new array ,set the value are 10; set_value(cDiagram); //last_shift(cDiagram); return 0;}////////////////////////////////////////// 建立一个3*3数组,初值都设为10;////////////////////////////////////////void create(int array[][3]){ printf("\n\n***********************************\n\n"); printf("九宫图算法实现过程\n\n"); printf("***********************************\n\n"); int line; int row; for(line=0;line<3;line++) { for(row=0;row<3;row++) { array[line][row]=10; } } // set_value(array); //show(array);}//////////////////////////////////////////// 显示数组状态 ////////////////////////////////////////////void show(int array[][3]){ for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { printf("%3d",array[i][j]); } printf("\n\n"); }}////////////////////////////////// 产生数组的初始状态 //////////////////////////////////////void set_value(int array[][3]){ int i=0; int rand_num_line; int rand_num_row; printf(" \n\n九宫图的初始值为:\n\n"); while(i<=8) { rand_num_line=rand()%3; rand_num_row=rand()%3; if(array[rand_num_line][rand_num_row]!=i&& array[rand_num_line][rand_num_row]==10) { array[rand_num_line][rand_num_row]=i; ++i; } } show(array); //printf(" let's begin!!\n"); aim_get(array);}//////////////////////////////////////////////////////////// judge the initial array get the target or no ! /////////////////////////////////////////////////////////////void aim_get(int array[][3]){ int aim[3][3]={{1,2,3},{8,0,4},{7,6,5}}; int line; int row; int judge=0; for(line=0;line<3;line++) { for(row=0;row<3;row++) { if(array[line][row]!=aim[line][row]) { judge=1; } } } if(judge==1) { judge_x1(array); } else { target(array); }}//////////////////////////////////////////// the target diagram ///////////////////////////////////////////////void target(int array[][3]){ printf("\n\n the last diagram is :\n"); show(array);}///////////////////////////////////////judge the x1 is 1 or no! ///////////////////////////////////////////void judge_x1(int array[3][3]){ //int x1=1; int temp; //printf(" \n\n\n the array[0][2]=%d\n\n",array[0][2]); if(array[0][2]!=1 && array[0][2]!=0) // x3!=1 || x3!=0; { while(array[0][0]!=1) { //printf("i am here!!1"); temp=array[0][0]; array[0][0]=array[0][1]; array[0][1]=array[1][1]; array[1][1]=array[1][2]; array[1][2]=array[2][2]; array[2][2]=array[2][1]; array[2][1]=array[2][0]; array[2][0]=array[1][0]; array[1][0]=temp; } } else { if(array[0][2]==0) // x3==0; { // printf("\n\n array[0][2]=0\n\n"); temp=array[0][2]; array[0][1]=array[0][2]; array[0][2]=temp; judge_x1(array); goto tt; } else /// x3==1; { //printf("\n\narray[0][2] should is 1, %d",array[0][2]); if(array[1][1]==0) //// x0==0; { temp=array[0][1]; array[0][1]=array[1][1]; array[1][1]=temp; judge_x1(array); } else //// x3==1 && x0!=0; { shift_all(array); judge_x1(array); } } } printf(" 确定了X1位置后,九宫图为:\n"); show(array); judge_x2(array);tt: int p=1;}///////////////////////////////////// judge the x2's position ///////////////////////////////////////void judge_x2(int array[][3]){ int temp; while(array[0][1]!=2) { temp=array[0][1]; array[0][1]=array[0][2]; array[0][2]=array[1][2]; array[1][2]=array[2][2]; array[2][2]=array[2][1]; array[2][1]=array[2][0]; array[2][0]=array[1][0]; array[1][0]=array[1][1]; array[1][1]=temp; } printf(" 确定了X2位置后,九宫图为: \n"); show(array); judge_x3(array);}//////////////////////////////////////////////////////////// shift from array[1][0] to array[2][2] ///////////////////////////////////////////////////////////void shift_low_six(int array[][3]){ int temp; temp=array[1][0]; array[1][0]=array[1][1]; array[1][1]=array[1][2]; array[1][2]=array[2][2]; array[2][2]=array[2][1]; array[2][1]=array[2][0]; array[2][0]=temp; } //////////////////////////////////////////////////////////// shift from array[0][0] to array[2][2] /////////////////////////////////////////////////////////////////void shift_all(int array[][3]){ int temp; temp=array[0][0]; array[0][0]=array[0][1]; array[0][1]=array[0][2]; array[0][2]=array[1][2]; array[1][2]=array[2][2]; array[2][2]=array[2][1]; array[2][1]=array[2][0]; array[2][0]=array[1][0]; array[1][0]=temp;} ///////////////////////////////////////////////// shift aiti-direction ///////////////////////////////////////////////void anti_shift_all(int array[][3]){ int temp; temp=array[1][0]; array[1][0]=array[2][0]; array[2][0]=array[2][1]; array[2][1]=array[2][2]; array[2][2]=array[1][2]; array[1][2]=array[0][2]; array[0][2]=array[0][1]; array[0][1]=array[0][0]; array[0][0]=temp; }/////////////////////////////////////////////// judge x3's position /////////////////////////////////////////////////void judge_x3(int array[][3]){ int line; int row; int temp; if(array[0][2]!=3) { while(array[1][1]!=3) // shift the int ,untill 3 stay in x0 { shift_low_six(array); } for(int i=0;i<=2;i++) { for(int j=0;j<=2;j++) { if(array[i][j]==0) { line= i; row=j; } } } if(line==0&&row==2) { shift_all(array); } else if(line==1&&row==2) { shift_all(array); temp=array[0][1]; array[0][1]=array[0][2]; array[0][2]=temp; } else if(line==2&&row==2) { shift_all(array); temp=array[1][2]; array[1][2]=array[0][2]; array[0][2]=array[0][1]; array[0][1]=temp; } else if(line==2&&row==1) { shift_all(array); temp=array[2][2]; array[2][2]=array[1][2]; array[1][2]=array[0][2]; array[0][2]=array[0][1]; array[0][1]=temp; } else if(line==2&&row==0) { array[2][0]=array[1][0]; array[1][0]=array[0][0]; array[0][0]=array[0][1]; array[0][1]=0; } else { array[1][0]=array[0][0]; array[0][0]=array[0][1]; array[0][1]=0; } array[0][1]=3; array[1][1]=0; anti_shift_all(array); } printf(" 确定了X3位置后,九宫图为:\n"); show(array); judge_x4(array);}//////////////////////////////////////////////////// judge x4's position ////////////////////////////////////////////////////////void judge_x4(int array[][3]){ while(array[1][2]!=4) { shift_low_six(array); } printf(" 确定了X4位置后,九宫图为:\n"); show(array); judge_x5(array);}/////////////////////////////////////////////// shift_low_four //////////////////////////////////////////////////////void shift_low_four(int array[][3]){ int temp; temp=array[1][1]; array[1][1]=array[2][1]; array[2][1]=array[2][0]; array[2][0]=array[1][0]; array[1][0]=temp;}//////////////////////////////////////////////////// judge x5's position /////////////////////////////////////////////////////////void judge_x5(int array[][3]){ if(array[2][2]==0) { while(array[1][1]!=5) shift_low_four(array); shift_all(array); set_x5(array); } else if(array[2][2]!=5) { while(array[1][1]!=5) shift_low_four(array); if(array[2][1]==0) { shift_all(array); array[2][2]=array[1][2]; set_x5(array); } else if(array[2][0]==0) { shift_all(array); array[2][1]=array[2][2]; array[2][2]=array[1][2]; set_x5(array); } else if(array[1][0]==0) { shift_all(array); array[2][0]=array[2][1]; array[2][1]=array[2][2]; array[2][2]=array[1][2]; set_x5(array); } } printf(" 确定了X5位置后,九宫图为:\n"); show(array); last_shift(array); }void set_x5(int array[][3]){ array[1][2]=5; array[1][1]=0; anti_shift_all(array);}/*void judge_x7(int array[][3]){ if(array[2][2]!=0 || array[2][2]!=5) //x5!=0||x5!=5 { while(array[1][1]!=5) { shift_low_four(array); } if(array[2][1]==0) { shift_all(array); array[2][2]=array[1][2]; array[1][2]=0; } else if(array[2][0]==0) { shift_all(array); array[2][1]=array[2][2]; array[2][2]=array[1][2]; array[1][2]=0; } else { if(array[1][0]==0) { array[1][0]=array[0][0]; array[0][0]=array[0][1]; array[0][1]=array[0][2]; array[0][2]=array[1][2]; array[1][2]=0; } } array[1][2]=5; array[1][1]=0; printf("\nthe array[2][1]=%d\n",array[2][1]); show(array); //anti_shift_all(array); printf("\nthe array[2][1]=%d\n",array[2][1]); } else if(array[2][2]==0) //x5==5 { while(array[2][1]!=5) { shift_low_four(array); } array[2][2]=5; array[2][1]=0; } } printf(" 确定了X5位置后,九宫图为:\n"); show(array); last_shift(array);*///////////////////////////////////////////////// last_shift /////////// // to determine the last four numbers/////// x6,x7,x8,x0 /////////////////////////////////////////////////////void last_shift(int array[][3]){ int temp; while(array[2][1]!=6) { shift_low_four(array); } if(array[1][1]!=0) { if(array[1][0]==0) { temp=array[1][0]; array[1][0]=array[1][1]; array[1][1]=temp; } else { array[2][0]=array[1][0]; array[1][0]=array[1][1]; array[1][1]=0; } } printf("***********************************\n"); printf("***********************************\n\n"); printf(" 经过计算,最终的九宫图为: \n"); show(array); if(array[2][0]==7) { printf("****************************\n"); printf("** 此为九宫图的最终解! **\n"); printf("****************************\n"); } else { printf("****************************\n"); printf("** 对不起,此无解九宫图!**\n"); printf("****************************\n"); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -