⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 九宫.cpp

📁 人工智能的过程表示法求解九宫问题,vc开发
💻 CPP
字号:
///////////////////////////////////////
// 九宫图算法;
//////////////////////////////////////

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.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 judge_x6(int [][3]);
void judge_x7(int [][3]);
void judge_x8(int [][3]);
void judge_x9(int [][3]);
void judge_x10(int [][3]);
void judge_x11(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]);


///////////////////////////////////////////////////////
/////       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[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]=temp;        
}


/////////////////////////////////////////
//////    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;

}

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

/////////////////////////////////////////
///  显示数组状态  ////
////////////////////////////////////////

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 n;
	int i=0;
	int rand_num_line;
    int rand_num_row;

	printf("    \n\n请输入选择:1 随机输入  2 手动输入\n\n");
	scanf("%d",&n);

	if(n!=1||n!=2)
	{
		target(array);
	}

	printf("\n  ***************** \n");
	printf("\n  运  算  开  始  :\n");

	if(n==1)
	{
		//随机选取九个数字
		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; 
			}
		}
	}
	else
	{
		printf("\n请从键盘输入九宫图(空格用0代替):\n");
		for(int i=0;i<3;i++)
		{
			for(int j=0;j<3;j++)
			{
			scanf("%d",&array[i][j]);
			}
		}
		printf("\n九宫图的初始值为:\n");
	}

	show(array);
    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])
{
	int n;
	printf("    \n输入有误,请重新输入:");
	printf("    \n\n请输入选择:1 随机输入  2 手动输入\n\n");
	scanf("%d",&n);
}


////////////////////////////////////
///judge the x1 is 1 or no!  ///////
////////////////////////////////////

void judge_x1(int array[3][3])
{

	if(array[0][0]==1)            
	{
		judge_x3(array);
    }
	else
		judge_x2(array);
}


//////////////////////////////////
/// judge the x2's position /////
//////////////////////////////////

void judge_x2(int array[3][3])
{

  
	int temp;

	if(array[0][2]==1 || array[0][2]==0)            
	{
		if(array[0][1]!=1 && array[0][1]!=0)
		{
			temp=array[0][1];
			array[0][1]=array[0][2];
			array[0][2]=temp;
		}
		else
		{
			temp=array[1][2];
			array[1][2]=array[0][2];
			array[0][2]=temp;
		}
	}
	while(array[0][0]!=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;
	}
	while(array[1][0]!=0)
	{
		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("  确定了数码1位置后,九宫图为:\n");
    show(array);
	judge_x3(array);
}

//////////////////////////////////////////
/////      judge x3's position     ///////
//////////////////////////////////////////

void judge_x3(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;
	}
	if(array[0][2]==0)
	{
		temp=array[0][2];
		array[0][2]=array[1][2];
		array[1][2]=temp;
	}
	while(array[1][1]!=0)              
	{
		shift_low_six(array);
	}
	printf("  确定了数码2位置后,九宫图为: \n");
	show(array);
	if(array[0][2]==3)
	{
		judge_x7(array);
	}
	else
	{
		judge_x4(array);
	}
}


//////////////////////////////////////////
/////      judge x4's position     ///////
//////////////////////////////////////////

void judge_x4(int array[][3])
{
   
	int temp;
	if(array[0][2]!=3)
	{
		while(array[1][1]!=3)                     
		{
			shift_low_six(array);
		}
		if(array[2][0]==0)
		{
			temp=array[2][0];
			array[2][0]=array[1][0];
			array[1][0]=temp;
		}
		else if(array[2][1]==0)
		{
			temp=array[2][1];
			array[2][1]=array[2][0];
			array[2][0]=array[1][0];
			array[1][0]=temp;
		}
		else if(array[2][2]==0)
		{
			temp=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[1][2]==0)
		{
			temp=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;
		}
	}

	printf("  确定了数码3位置后,九宫图为:\n");
	show(array);
	judge_x5(array);
}


//////////////////////////////////////////////
//////   judge x5's position    ///////////
/////////////////////////////////////////////


void judge_x5(int array[][3])
{
	int temp;
	while(array[1][1]!=0)
	{	
		temp=array[0][0];
		array[0][0]=array[1][0]; 
		array[1][0]=array[1][1];
		array[1][1]=array[0][1]; 
		array[0][1]=temp;
	}
	printf("  确定了数码0位置后,九宫图为:\n");
	show(array);
	judge_x6(array);
}

//////////////////////////////////////////////
//////     judge x6's position     ///////////
//////////////////////////////////////////////
void judge_x6(int array[][3])
{ 
	int temp;	
	while(array[1][0]!=0)
	{
		temp=array[0][0];
		array[0][0]=array[1][0];
		array[1][0]=array[1][1];
		array[1][1]=array[1][2];
		array[1][2]=array[0][2];
		array[0][2]=array[0][1];
		array[0][1]=temp;
	}
    printf("  重新确定了数码0位置后,九宫图为:\n");
	show(array);
	judge_x7(array);
}
//////////////////////////////////////////////
//////     judge x7's position     ///////////
//////////////////////////////////////////////
void judge_x7(int array[][3])
{ 	
	int temp;
	while(array[1][2]!=4)
	{
		shift_low_six(array);
	}
	if(array[2][2]==0)
	{
		temp=array[2][2];
		array[2][2]=array[2][1];
		array[2][1]=temp;
    }
	while(array[1][1]==0)
	{
		shift_low_four(array);
	}
	printf("  确定了数码4位置后,九宫图为:\n");
	show(array);
	if(array[2][2]==5)
	{
		judge_x11(array);
	}
	else
	{
		judge_x8(array);
	}
}
//////////////////////////////////////////////
//////     judge x8's position     ///////////
//////////////////////////////////////////////
void judge_x8(int array[][3])
{ 	
	int temp;
	while(array[1][1]!=5)
	{
		shift_low_four(array);
	}
	if(array[2][0]==0)
	{
		temp=array[2][0];
		array[2][0]=array[1][0];
		array[1][0]=temp;
	}
	else if(array[2][1]==0)
	{
		temp=array[2][1];
		array[2][1]=array[2][0];
		array[2][0]=array[1][0];
		array[1][0]=temp;
	}
    printf("  确定了数码5位置后,九宫图为:\n");
	show(array);
	judge_x9(array);
}
//////////////////////////////////////////////
//////     judge x9's position     ///////////
//////////////////////////////////////////////
void judge_x9(int array[][3])
{ 	
	int temp;
	temp=array[1][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]=temp;

	temp=array[1][2];
	array[1][2]=array[1][1];
	array[1][1]=array[2][1];
	array[2][1]=temp;
    printf("  确定了数码0位置后,九宫图为:\n");
	show(array);
	judge_x10(array);
}
//////////////////////////////////////////////
//////     judge x10's position     ///////////
//////////////////////////////////////////////
void judge_x10(int array[][3])
{ 	
	while(array[2][0]!=0)
	{
		anti_shift_all(array);
	}
    printf("  最后确定数码5位置后,九宫图为:\n");
	show(array);
	judge_x11(array);
}
//////////////////////////////////////////////
//////     judge x11's position     ///////////
//////////////////////////////////////////////
void judge_x11(int array[][3])
{   

	while(array[2][1]!=6)
	{
		shift_low_four(array);
	}
e:	if(array[2][0]==7)
	{
		array[1][1]=0;
		array[1][0]=8;
	}

	if(array[2][0]==0)
	{
		array[2][0]=array[1][0];
		array[1][0]=0;
		goto e;
	} 

    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 + -