马的周游C语言实现
发布时间:2020-12-16 07:45:33 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 // Problem#: 1153 // Submission#: 3079805 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unp
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 // Problem#: 1153 // Submission#: 3079805 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/ // All Copyright reserved by Informatic Lab of Sun Yat-sen University // // main.cpp // 马的周游 // // Created by liujan on 10/24/14. // Copyright (c) 2014 liujan. All rights reserved. // #include <iostream> #include "vector" #include "memory.h" #include "algorithm" using namespace std; bool isvisited[8][8]; int move_x[8] = { -2,-1,1,2,-2,2 }; int move_y[8] = { -1,1 }; vector<int>route; struct Node{ int x,y; int child; }; bool cmp(Node a,Node b){ return a.child < b.child; } vector<Node> nextMove(Node current){ int y = current.y; int x = current.x; vector<Node>next; for (int i = 0; i < 8; i++){ int tmpx = x + move_x[i]; int tmpy = y + move_y[i]; if (tmpx >= 0 && tmpx <= 7 && tmpy <= 7 && tmpy >= 0 && !isvisited[tmpy][tmpx]){ Node tmp; tmp.x = tmpx; tmp.y = tmpy; tmp.child = 0; next.push_back(tmp); } } return next; } bool move(Node pos){ if (route.size() == 64){ for (size_t i = 0; i < route.size() - 1; i++){ cout << route[i] << " "; } cout << route[route.size() - 1] << endl; return true; } else{ vector<Node> next = nextMove(pos); for (int i = 0; i < next.size(); i++){ next[i].child = nextMove(next[i]).size(); } sort(next.begin(),next.end(),cmp); for (size_t i = 0; i < next.size(); i++){ int y = next[i].y; int x = next[i].x; isvisited[y][x] = true; route.push_back(y * 8 + x + 1); bool result = move(next[i]); if (!result){ isvisited[y][x] = false; route.pop_back(); } else{ return true; } } return false; } } int main(){ int n; while (cin >> n && n != -1) { for (int i = 0; i < 8; i++){ for (int j = 0; j < 8; j++) isvisited[i][j] = false; } route.clear(); int y = (n - 1) / 8; int x = n - y * 8 - 1; Node head; head.x = x; head.y = y; isvisited[y][x] = true; route.push_back(n); move(head); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |