下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
// 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
#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 };
vectorroute;
struct Node{
int x,y;
int child;
};
bool cmp(Node a,Node b){
return a.child < b.child;
}
vector nextMove(Node current){
int y = current.y;
int x = current.x;
vectornext;
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 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);
}
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的马的周游C语言实现全部内容,希望文章能够帮你解决马的周游C语言实现所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!