1. 程式人生 > >馬的最短路徑(有障礙)

馬的最短路徑(有障礙)

                                           Problem E 馬的最短路徑

Description

 在一個8*8的棋盤上有三個位置馬不能到,它們是(2,2)、(7,7)、(4,4)。棋盤的左下角是(1,1),右上角是(8,8)。給你最初的位置(xs,ys),最終的位置(xe,ye)請程式設計求出馬的最小步數。

Input

有多組測試資料,每組一行,有4個整數,xs,ys,xe,ye。

Ouput

輸出最小步數。

Sample Input

1 1 3 3

Sample Output

5

如圖所示:

實驗程式碼:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
int direction[8][2] = { { 2, 1 },{ 1, 2 },{ -1, 2 },
{ -2, 1 },{ -2, -1 },{ -1, -2 },{ 1, -2 },{ 2, -1 } }; //方向
bool flag[9][9];//標記是否走過
struct Horse {
	int x;
	int y;
	int step;
};
int main()
{
	int xs, ys, xe, ye;
	while (cin >> xs >> ys >> xe >> ye) {
		struct Horse hs;
		hs.x = xs; hs.y = ys; hs.step = 0;
		queue <Horse> lq;
		lq.push(hs);
		while (!lq.empty()) {
			struct Horse hs1;
			hs1.x = lq.front().x;
			hs1.y = lq.front().y;
			hs1.step = lq.front().step;
			lq.pop();
			if (hs1.x == xe && hs1.y == ye) {
				cout << hs1.step << endl;;
			}
			else {
				for (int z = 0; z < 8; z++) {
					struct Horse ho;
					ho.x = hs1.x + direction[z][0];
					ho.y = hs1.y + direction[z][1];
					ho.step = hs1.step + 1;
					if (ho.x >= 1 && ho.x <= 8 && ho.y >= 1
						&& ho.y <= 8
						&& flag[ho.x][ho.y] == false) {
						lq.push(ho);
						flag[ho.x][ho.y] = true;
					}
				}
			} 
		}
	}
	return 0;
}

相關推薦

路徑障礙

                                           Problem E 馬的最短路徑 Description  在一個8*8的棋盤上有三個位置馬不能到,它們是(2,

圖之從一個頂點到其餘各個頂點的路徑向圖

目錄 從一個頂點到其餘各個頂點最短路徑的簡介 舉例以及詳細分析 程式碼塊 測試結果 從一個頂點到其餘各個頂點最短路徑的簡介(又名單元最短路徑) 1.定義概覽 Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所

向圖的路徑Floyd演算法

最近在研究最短路徑演算法,使用java實現。 原始資料是一共有6個點,他們之中任意2個點(i,j)之間的距離v(i,j)的數值如下面二位陣列中所示,整體演算法使用Java語言實現。 class Floyd{ public static void main(S

【ACM】帶權向圖單源路徑Dijkstra演算法

最短路徑的第一類問題 求從單個源點到其餘各頂點的最短路徑。這是一種貪心策略,不可以存在負權邊。 演算法簡介 給定帶權有向圖G和源點v0,求從源點v0到G中其餘各頂點的最短路徑。迪傑斯特拉演算法是對

luogu P4779 【模板】單源路徑標準版

-o2 struct call 哈哈 poi fun fin hole char 線段樹優化dij 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 我可能是個智障 // luogu-judger-enable-o2 #pragma GCC diagnostic error "-

[短路/線段樹大法優化DIJ] 【模板】單源路徑標準版

洛谷原題 這題我自己看了STL優先佇列後試了試優化DIJ演算法,但我這個菜比只有32分... 還是老老實實用線段樹吧! 自己寫的程式,反正AC了,線段樹大法好! 具體見程式碼 #include<bits/stdc++.h> using namespace std; long lon

路徑鄰接矩陣弗洛伊德演算法

#include<bits/stdc++.h> #define MaxInt 1e8 #define MVNum 100 #define OK 1 #define ERROR 0 using namespace std; typedef int VerTexType; typedef i

單源路徑弱化版

題目大意: 給出一個有向圖,請輸出從S出發到所有點的最短路徑長度。 解題思路: 看到資料範圍 Spfa 然後int錯了,我就把inf 1099改成了2147483647 一看,dis會炸掉,於是我把dis改成了long long,保險期間,inf

短路】洛谷_4779 單源路徑標準版

題意 給定一個NN個點MM條邊的有向圖,起點是SS,求出起點到每個點的最短路 思路 堆優化過後的dijkstradijkstra演算法。 程式碼 #include<queue&g

#dijkstra+zkw線段樹#洛谷 4779 洛谷 1339 【模板】單源路徑標準版熱浪

分析 首先為什麼要說這種方法呢,因為根據模板,zkw線段樹優化比STL堆快了一倍,所以說在此推薦我的熱浪題解 程式碼 #include <cstdio> #include <cctype> #include <algorithm> #

題解 P3371 【模板】單源路徑弱化版

一個story: 2018.10.3,晚上,在與我校是競爭關係的學校的機房(去一起集訓)訓練。 我:(頹) 對方教練:(走過來) 我:(趕快開始假裝研究SPFA) 對方教練:這是?最短路? 我:是啊是啊(瘋狂掩飾尷尬) 對方:這是SPFA? 我:是啊是啊(瘋狂掩

資料結構-基於鄰接矩陣實現圖的遍歷視覺化及使用Floyd、Dijkstra演算法求解路徑JavaScript實現

使用 JavaScript 基於鄰接矩陣實現了圖的深度、廣度遍歷,以及 Floyd、Dijkstra 演算法求解最短路徑。另外使用 SVG 實現圖的遍歷視覺化。一、輸入首先,輸入資料主要有兩個,一個是存放節點名的陣列,另一個是存放邊物件的陣列。例如://存放圖結點的陣列 va

圖結構練習——路徑Dijkstra演算法

think: 1注意重複邊的覆蓋 2注意map陣列的初始化 3注意dist陣列的初始化 圖結構練習——最短路徑 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 給定一個

LG4779 【模板】單源路徑標準版

題意 給定一個 \(N\) 個點,\(M\) 條有向邊的帶非負權圖,請你計算從 \(S\) 出發,到每個點的距離。 資料保證你能從 \(S\) 出發到任意點。 \(1≤N≤100000\); \(1≤M≤200000\); 分析 可以斐波那契堆。 程式碼 #include<iostrea

資料結構-基於鄰接表實現圖的遍歷視覺化及使用Floyd、Dijkstra演算法求解路徑JavaScript實現

使用 JavaScript 基於鄰接表實現了圖的深度、廣度遍歷,以及 Floyd、Dijkstra 演算法求解最短路徑。另外使用 SVG 實現圖的遍歷視覺化。<!DOCTYPE html> <html lang="en"> <head>

路徑Dijkstra模板

打一個dj的模板,方便以後查閱 #include <iostream> #include <cstdio> #include <cstring> using na

洛谷 P4779 【模板】單源路徑標準版 題解

題目來源: 題目描述: 題目背景 狗哥做爛了最短路,突然機智的考了Bosh一道,沒想到把Bosh考住了...你能幫Bosh解決嗎? 他會給你100000000000000000000000000000000000%10金幣w 題目描述 給定n個點的帶權有向

P3371 【模板】單源路徑弱化版

pre urn mes enable 路徑 gdi name div int // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorit

拓撲排序+路徑無環加權向圖路徑演算法

特點:        1、線性時間內解決單點最短路徑問題        2、能夠處理負權邊問題        3、能夠找出最長路徑 不足:因為是基於拓撲排序的,所以不能解決帶環的問題  import java.util.ArrayList; import java.util

資料結構——帶權向圖路徑演算法Dijkstra演算法

Dijkstra演算法是由荷蘭電腦科學家艾茲格·迪科斯徹發現的。演算法解決的是有向圖中最短路徑問題。 舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離。 Dijkstra演算法可以用來找到兩個城市之間的最短路徑。 Dijkstra演算法的輸入包含了一個有權重的有向圖G,以及G中的一個