第二次实验报告
人工智能及其应用
2022 年 4 月 10 日
目 录
1 实验内容 ......................................................................................................................................3
2 实验目的 ......................................................................................................................................3
3 实验步骤 ......................................................................................................................................3
4 实验结果 ......................................................................................................................................3
5 存在问题 .......................................................................................................................................3
1 实验内容
8 数码问题实现:
1、任选语言,采用过程表示法实现算法,并给出具体的移动
步骤
2、尝试 15 数码问题的过程表示法实现
2 实验目的
通过人工智能实验,可以帮助更好地掌握人工智能相关概念、技
术、原理、应用等,通过实验提高编写实验报告、总结实验结果的能
力,使对智能程序、智能算法等有比较深入的认识。
1.将过程表示法用代码表示出来,加深对过程表示法的理解
2.增强创新能力,尝试用代码解决 15 数码问题
3 实验步骤
数字 1~8 是对应棋子的名称,小方格是可供移动的空位,目标状
态置为 Sg, X0~X8 来标记九个小方格的对应位置。
步 1:首先检查棋盘布局,若 So≠Sg,则检查 X1 处棋子是否为数码
1。是,则转步 3,否则任意移动棋牌,使棋子 1 和空格均不在 X3 位
置上。
步 2:按照逆时针方向移动空格,并依次移动棋牌,直到数码 1 位
于 X1 位置,空格位于 X8 位置时为止。
步 3,保持 X1=1 不动,按照逆时针方向移动棋子和空格,直到数码
2 位于 X2 位置,空格位于 X0 位置时为止。若这时刚好数码 3 在 X3
位置上,则转第 7 步。
步 4,按照环形的逆时针方向移动空格,并依次移动棋牌,直到数
码 3 位于 X0 位置,空格位于 X8 位置时为止。
步 5,按照环形顺时针方向移动空格,并依次移动棋牌,直到空格
到 X0 为止。
步 6,按照顺时针环形方向移动空格,并依次移动棋牌,直到空格
又回到 X8 为止。
步 7,按照逆时针环形方向,依次移动空格,直到数码 4 位于 X4 位
置,空格位于 X0 位置。若这时数码 5 刚好位于 X5 位置上,则转第 11
步。
步 8,按照环形逆时针方向移动空格, 并依次移动棋牌,直到数码 5
位于 X0,空格位于 X8 位置时为止。
步 9,依次移动棋牌,使得空格位置按照环形方向移动空格, 并依次
移动棋牌,直到空格位于 X4 位置时为止。这时,使数码 5 插入 X4 位
置,再使 X6 位置数码插入 X0 位置,则空格位于 X6 位置。
步 10,按照环形方向移动空格, 并依次移动棋牌,直到直到数码 5
位于 X5 。
步 11,按照环形逆时针方向移动空格, 并依次移动棋牌,直到状态
为目标状态,则问题得解;否则可得到另一种所示,说明了所给初始
状态达不到所要求的目标状态。
4 实验结果
#include <stdio.h>
#include <stdlib.h>
void zero_back(int start[], int array[], int *zero_place, int length)
{
int i;
int temp;
for (i = 0; i < length-1; i++)
{
temp = start[*zero_place];
start[*zero_place] = start[array[i + 1]];
start[array[i + 1]] = temp;
*zero_place = array[i + 1];
}
temp = start[*zero_place];
start[*zero_place] = start[array[0]];
start[array[0]] = temp;
*zero_place = array[0];
return;
}