/*
八数码问题:
编号为1~8的8个正方形滑块被摆成3行3列(有一个格子空留),如图所示。每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中,而它原来的位置就称为了
新的空格。给定初始局面和目标局面(用0表示空格格),你的任务是计算出最少的移动步数。如果无法达到目标局面,则输-1.
2 6 4 8 1 5
1 3 7 7 3 6
5 8 4 2
思路:
1 用广度优先搜索,难道得用9个位置剪枝才能达到限定条件?,初始状态和结束状态难道都是一群,而不是能用一个结构体表示,用二维数组表示。
2 八数码问题时图上的最短路径问题,每个状态就是9个各自中的滑块编号(从上到下,从左到右把他们放到一个包含9个元素的数组中)
*/
/*
关键:
typedef int State[9];
State s[100];
int memcmp(void* buf1,void* buf2,size_t count);//比较buf1与buf2的前count个字符,0表示相等
void* memcpy(void* to,const void* from,size_t count);//从to中拷贝前count个字符到to中
//typedef int State[9];//
//State s[100];
//s的素具类型是长度为100的数组,数组元素s[i]的数据类型是State是长度为10的数组,等同于定义了一个二维数组s[100]=iArr[100][9],数组元素师int
//int iarr[100][10],arr的数据类型是长度为100的数组,数组元素师arr[i],arr[i]的数据类型是长度为10的数组,数组元素师int
*/
/*
关键:
1 typedef int State[9];//s的素具类型是长度为100的数组,数组元素s[i]的数据类型是State是长度为10的数组,等同于定义了一个二维数组s[100]=iArr[100][9],数组元素师int
//int iarr[100][10],arr的数据类型是长度为100的数组,数组元素师arr[i],arr