SDNU OJ 1025 馬踏飛燕
該題是一道使用BFS(廣度優先搜尋)的經典題目(當然如果你不怕麻煩,DFS也是可以的), 思路很簡單,用queue存下各個情況每次都判斷是否踏到燕子,並且記得記錄深度。
Description
無聊的陶陶準備編寫一款遊戲,名字就叫做“馬踏飛燕”,在這款遊戲中有個一個100*100的座標,把馬放在任意一個座標點,再把燕子放在任意一個座標點,並且燕子不會移動,馬只能按照象棋規則走“日”。若4步之內能“踏”到燕子,則成功。笨蛋的陶陶不知道該怎麼去寫,現在請你幫助他。
走“日”說明:當馬的座標為(5,5)的時候,馬下一步可以走的座標有8個點,分別為(4,3)(6,3)(3,4)(7,4)(3,6)(7,6)(4,7)(6,7)
Input
第一行兩個整數,馬的起始座標x,y (0<x,y<100)
第一行兩個整數,燕子的座標m,n (0<m,n<100)
Output
若4步之內能“踏”到燕子,則輸出“Y”
若4步之內不能“踏”到燕子,則輸出“N”
Sample Input
5 5
7 4
Sample Output
Y
#include<cstdio> #include<iostream> #include<queue> #include<algorithm> using namespace std; int sun[8][2] = {2,1, 2,-1, 1,2, 1,-2, -2,1, -2,-1 ,-1,2, -1,-2};//記錄下“日”的八個方向便於直接利用 bool getyan = 0;//記錄結果 bool sec[105][105];//標記是否節點是否來過 int i, j; struct horse { int heng; int shu; int step;//記錄步驟 }; void BFS(int x, int y) { queue<horse> GG; GG.push(horse{x, y, 0}); while(!GG.empty()){ horse m = GG.front(); GG.pop(); if(sec[m.heng][m.shu] != 1){ sec[m.heng][m.shu] = 1; if(m.heng == i && m.shu == j){ getyan = 1; break; } for(int jump = 0;jump < 8;jump++){ int h = m.heng + sun[jump][0]; int s = m.shu + sun[jump][1]; if(h <= 100 && h >= 1 && s <= 100 && s >= 1 && m.step <= 3){ GG.push(horse{h, s, m.step + 1}); } } } } while(!GG.empty()) GG.pop(); } int main() { int a, b; while(scanf("%d %d", &a, &b) != EOF){ scanf("%d %d", &i, &j); BFS(a, b); if(getyan) cout << 'Y' << endl; else cout << 'N' << endl; memset(sec, 0, sizeof(sec)); getyan = 0; } return 0; }
相關推薦
SDNU OJ 1025 馬踏飛燕
該題是一道使用BFS(廣度優先搜尋)的經典題目(當然如果你不怕麻煩,DFS也是可以的), 思路很簡單,用queue存下各個情況每次都判斷是否踏到燕子,並且記得記錄深度。 Description 無聊的陶陶準備編寫一款遊戲,名字就叫做“馬踏飛燕”,在這款遊戲中有個一個100
SDNU__1025.馬踏飛燕
無聊的陶陶準備編寫一款遊戲,名字就叫做“馬踏飛燕”,在這款遊戲中有個一個100*100的座標,把馬放在任意一個座標點,再把燕子放在任意一個座標點,並且燕子不會移動,馬只能按照象棋規則走“日”。若4步之內能“踏”到燕子,則成功。笨蛋的陶陶不知道該怎麼去寫,現在請你幫助他。
java實現馬踏棋盤問題
並且 mov .... i++ pan 這一 初始化 count 調用 1.問題描述: 在國際象棋中,馬走日,用戶輸入棋盤的起始位置從1-8,輸出從這一點開始,馬走完整個棋盤的各個方案,並輸出方案數 2.輸入樣式: 請輸入棋盤馬的起始位置: 1 1 3
遞推問題之馬踏過河卒問題
-a 固定 能夠 沒有 就是 數據 nbsp size turn problem 棋盤上A點有一個過河卒,需要走到目標B點。卒行走的規則:可以向下、或者向右。同時在棋盤上C點有一個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為“馬攔
馬踏棋盤全部解
#include"stdio.h" int a[12][12]={0};//棋盤 int cut=0;//快取馬所走的步數 long count=0;//計算有多少種踏法 void horse(int x,int y); bool walk(int index,int *x,int
馬踏棋盤超簡潔遞迴80行完成
#include<stdio.h> #include<windows.h> #define MAX 8 #define NONE 0 #define START 1 int chess[MAX][MAX]; void initchess(); void traverche
中過象棋棋盤一半 馬踏日 從(1,1)出發只能向右踏出,到(m,n)有多少路徑
# include<stdio.h> # include<math.h> # define M 9 # define N 5 int a[10]={1},b[10]={1},sum=0,m,p;//a[]儲存橫座標,b[]儲存縱座標 int check(int n){ i
馬踏棋盤(騎士周遊問題),深度優先搜尋
馬踏棋盤問題(又稱騎士周遊或騎士漫遊問題是演算法設計的經典問題之一)。問題描述:國際象棋的棋盤是8×8的方格棋盤,先將馬放在任意指定的方格中,按照馬走棋的規則將馬進行移動,要求每個方格只能進入一次,最終使得馬走遍棋盤的64個方格。除了邊緣的位置,馬每次有8種走法
馬踏棋盤,貪心演算法
由於回溯法實在是太耗費時間,所以利用貪心演算法進行了優化,在閱讀了網上關於貪心演算法怎麼用之後又除錯了很久,終於在上一個回溯法的基礎上寫出了優化的演算法,但是由於本人水平實在有限,程式碼或多或少還是有些問題,優化的可能還不夠。希望自己能繼續進步吧。 所謂貪心演算
一轉眼13年 馬踏14間
一轉眼13年 馬踏14間 差不多一年的時長,很多地方變了樣,比如去年我租房子的地方,合約期滿正在轉讓,一年的時長不算長,我還沒有療好舊傷,想必很多小夥伴和我一樣念念不忘,時間走的沒有商量,全家福的照片在我眼前晃,晃的那麼蕩氣迴腸,彷彿剛剛和爸爸一起路過的池塘,經
馬踏棋盤優化
之前做了個深搜遍歷求解的方法,未優化,一個下午沒有結果,而且程式碼尚不夠精簡 看了一下優化方法,又重做了一個,基本不需要時間就能得到一個解 一共一百來行,沾沾自喜一下 #include<stdio.h> #include<windows.h>
馬踏棋盤問題
/*關於馬踏棋盤的基本過程:國際象棋的棋盤為 8*8 的方格棋盤。現將"馬"放在任意指定的方格中, 按照"馬"走棋的規則將"馬"進行移動。要求每個方格只能進入一次,最終使得"馬"走遍棋盤的64個方格。 */ #include <stdio.h> #include <time.h&g
馬踏棋盤(有問題的且不成熟的程式)
//將棋盤上的每個位置都走一遍 public class Mataqipan { public int zou(int position[][],int m,int n,int count){
light oj 1025 - The Specials Menu(區間DP->求刪除字元使其成為迴文串的方法數)
1025 - The Specials Menu PDF (English) Statistics Forum
馬踏棋盤-----Java版
關於馬踏棋盤的思路,大致演算法如下: 1.貪心演算法(找最少的出路,因為最少的出路往往不用進行多次選擇,貪 心演算法的主要理念是:最拿走的路是最好的路); 2.深度搜索:主要的演算法是深入進去探索,但執行時間有點長,效率有點低,但搜尋面比較廣泛; 3.回溯
馬踏棋盤演算法(騎士周遊問題)
一、馬踏棋盤演算法 1、國際象棋的棋盤為8*8的方格棋盤,將“馬”放在任意指定的方格中,按照“馬”走棋的規則將“馬”進行移動。要求每個方格只能進入一次,最終使得“馬”走遍棋盤64個方格。 2、關於國際象棋“馬”的走法:以“日”字為單位往斜對角上的那個方格走。如下圖所示馬在當
SDNU OJ 1182獎學金
用於C++中,對給定區間所有元素進行排序。標頭檔案是#include <algorithm>。 Sort函式使用模板: Sort(start,end,排序方法) Sort函式
回溯演算法之馬踏棋盤
問題描述: 在8*8國際象棋棋盤上,讓馬從某一位置開始,走“日”子型踏遍棋盤每一個格子。 演算法思想: 採用回溯演算法,在每一個點上按照一定順序探查下一步的走法,若走不動,則回溯到上一
馬踏棋盤:貪心演算法java實現
import java.util.ArrayList; import java.util.LinkedList; class Horse { private boolean board[][] = new boolean[8][8];//棋盤 private Link
馬踏棋盤C++實現與貪婪演算法優化
馬踏棋盤問題即在一個8*8的棋盤上,指定一個起點,找到一個路徑,讓棋子按照馬走日的規則將所有格子無重複的遍歷一次。 這個問題是在學習資料結構與演算法的時候看到的,當時看的是C語言的版本,也沒記住具體的解法,事後回顧起來覺得很有意思,於是自己用C++編寫了一段程式碼嘗試一下