Sicily-1152 回溯算法
一.题意:
走日字,每个位置都有有8种新位置,从起点开始刚好过29步遍历其他位置一遍。
二.代码
//
// main.cpp
// Sicily-1152 回溯算法
//
// Created by ashley on 14-10-21.
// Copyright (c) 2014年 ashley. All rights reserved.
// #include <iostream>
#include <utility>
using namespace std; //pair<int, int> moves[8] = {(1, 2), (2, 1), (2, -1), (1, -2), (-1, -2), (-2, -1), (-2, 1), (-1, 2)};
int moveX[] = {, , , , -, -, -, -};
int moveY[] = {, , -, -, -, -, , };
bool isVisited[];
int path[];
int counter;
bool success;
typedef struct
{
int x;
int y;
}point;
void dfs(point startPoint)
{
if (counter == ) {
success = true;
cout << path[];
for (int i = ; i < ; i++) {
cout << " " << path[i];
}
cout << endl;
return;
}
for (int i = ; i < ; i++) {
point nextPoint = {startPoint.x + moveX[i], startPoint.y + moveY[i]};
int num = nextPoint.y * + nextPoint.x + ;
if (nextPoint.x < && nextPoint.x >= && nextPoint.y < && nextPoint.y >= && isVisited[num - ] == false) {
isVisited[num - ] = true;
path[counter] = num;
counter++;
if (success) {
return;
}
dfs(nextPoint);
isVisited[num - ] = false;
counter--;
}
}
}
int main(int argc, const char * argv[])
{
int source;
while (cin >> source) {
if (source == -) {
break;
}
point sourcePoint = {source % - , source / };
for (int i = ; i < ; i++) {
isVisited[i] = false;
}
success = false;
counter = ;
//源点只能走一次
isVisited[source - ] = true;
path[counter - ] = source;
dfs(sourcePoint);
}
return ;
}
Sicily-1152 回溯算法的更多相关文章
- 46. Permutations 回溯算法
https://leetcode.com/problems/permutations/ 求数列的所有排列组合.思路很清晰,将后面每一个元素依次同第一个元素交换,然后递归求接下来的(n-1)个元素的全排 ...
- ACM/ICPC 之 最长公共子序列计数及其回溯算法(51Nod-1006(最长公共子序列))
这道题被51Nod定为基础题(这要求有点高啊),我感觉应该可以算作一级或者二级题目,主要原因不是动态规划的状态转移方程的问题,而是需要理解最后的回溯算法. 题目大意:找到两个字符串中最长的子序列,子序 ...
- c语言数据结构:递归的替代-------回溯算法
1.要理解回溯就必须清楚递归的定义和过程. 递归算法的非递归形式可采用回溯算法.主要考虑的问题在于: 怎样算完整的一轮操作. 执行的操作过程中怎样保存当前的状态以确保以后回溯访问. 怎样返回至上一次未 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...
- 回溯算法之n皇后问题
今天在看深度优先算法的时候,联想到DFS本质不就是一个递归回溯算法问题,只不过它是应用在图论上的.OK,写下这篇博文也是为了回顾一下回溯算法设计吧. 学习回溯算法问题,最为经典的问题我想应该就是八皇后 ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- C语言回溯算法解决N皇后问题
回溯算法的模型是 x++, not satisfy ? x-- : continue. 代码中x作列号,y[x]保存第x列上皇后放置的位置. #include<stdio.h> #incl ...
- 第1次实验——NPC问题(回溯算法、聚类分析)
题目:八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即随意两个皇后都不能处于同一 ...
随机推荐
- ASP.NET MVC+Entity Framework 4.1访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- malloc 申请得到的内存后,再 free 释放它的时候,操作系统会立即收回那块内存吗?
stackoverflow上的回答: In many malloc/free implementations, free does normally not return the memory to ...
- leetcode Contains Duplicate python
Given an array of integers, find if the array contains any duplicates. Your function should return t ...
- jQuery 如何写插件 - 第一步
这篇文章引自iteye,是老帖子了~~ 国外优秀的文也有,今天就看这位仁兄的吧,写的很到位啊,通俗易懂. jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相 ...
- Android 快速选择联系人
Activity 代码如下: /* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache ...
- JSON.parse这个是啥?
var jsontext = '{"firstname":"Jesper","surname":"Aaberg",&qu ...
- e.currentTarget
e.target总是指向点击的目标 e.currentTarget会指向这个点击标的冒泡对象 <div class="wrap"> wrap <div class ...
- ES6新特性简介
ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...
- 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_ ...
- java selenium webdriver实战 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...