return true; }int Distance(Node& node, int digit[][COL]) {//计算距离
int distance = 0; bool flag = false;
for(inti = 0; i< ROW; i++) for (int j = 0; j < COL; j++) for (int k = 0; k < ROW; k++) { for (int l = 0; l < COL; l++) {
if (node.digit[i][j] == digit[k][l]) { distance += abs(i - k) + abs(j - l); flag = true;
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
break; } else
flag = false; } if (flag) break; }
return distance; }
intMinDistance(int a, int b) {//二者取小 return (a < b ? a : b); }
void ProcessNode(int index) {//展开节点 int x, y; bool flag;
for (inti = 0; i< ROW; i++) { for (int j = 0; j < COL; j++) { if (node_v[index].digit[i][j] == 0) { x =i; y = j; flag = true; break;
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
}
else flag = false; } if(flag) break; }
Node node_up; //上移操作 Assign(node_up, index); intdist_up = MAXDISTANCE; if (x > 0) {
Swap(node_up.digit[x][y], node_up.digit[x - 1][y]);
if (isExpandable(node_up)) {
dist_up = Distance(node_up, dest.digit); node_up.index = index; node_up.dist = dist_up;
node_up.dep = node_v[index].dep + 1; node_v.push_back(node_up); } }
Node node_down; //下移操作 Assign(node_down, index);
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
intdist_down = MAXDISTANCE; if (x < 2) {
Swap(node_down.digit[x][y], node_down.digit[x + 1][y]);
if (isExpandable(node_down)) {
dist_down = Distance(node_down, dest.digit); node_down.index = index; node_down.dist = dist_down;
node_down.dep = node_v[index].dep + 1; node_v.push_back(node_down); } }
Node node_left;//左移操作 Assign(node_left, index); intdist_left = MAXDISTANCE; if (y > 0) {
Swap(node_left.digit[x][y], node_left.digit[x][y - 1]);
if (isExpandable(node_left)) {
dist_left = Distance(node_left, dest.digit); node_left.index = index; node_left.dist = dist_left;
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
node_left.dep = node_v[index].dep + 1; node_v.push_back(node_left); } }
Node node_right; //右移操作 Assign(node_right, index); intdist_right = MAXDISTANCE; if (y < 2) {
Swap(node_right.digit[x][y], node_right.digit[x][y + 1]);
if (isExpandable(node_right)) { dist_right dest.digit);
node_right.index = index; node_right.dist = dist_right;
node_right.dep = node_v[index].dep + 1; node_v.push_back(node_right); } }
node_v[index].dist = MAXNUM; }
int main() {
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
= Distance(node_right,
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
int number;
cout<< \"输入初始状态:\" <> number;src.digit[i][j] = number; }
src.index = 0; src.dep = 1;
cout<< \"输入目标状态\" <> number;dest.digit[m][n] = number; }
node_v.push_back(src); while (1) {
if (isEmptyOfOPEN()) { cout<< \"找不到解!\" <欧阳美创编 2021.01.01 2021.01.01欧阳美创编
欧阳美创编 2021.01.01 欧阳美创编
2021.01.01
intloc; // the location of the minimize node
loc = GetMinNode();
if(isEqual(loc, dest.digit)) { vectorrstep_v;cout<< \"初始状态:\" <PrintSteps(loc, rstep_v); cout<< \"成功!\" <ProcessNode(loc); } }return 0; }
时间:2021.01.01 创作:欧阳美 欧阳美创编 2021.01.01 欧阳美创编
2021.01.01