課程設計——中國象棋中的跳馬問題
此題是一個搜尋題,可用DFS或BFS,建議選擇BFS(廣搜)。一開始把馬的起始點加入佇列,然後用廣搜的思想把此點能到達的其他點加入佇列,這裡需要一個數組用來記錄此點在之前是否已經加入佇列,如果加入過隊列當中,就不需要再加入了,直到佇列裡的元素為空,或者搜尋到了終點,搜尋即停止,然後輸出相應答案即可。
參考程式碼如下:
#include<stdio.h> #define MAX 150 #define SIZE 10201 #define OK 1 //馬下一步最多能跳的地方的個數 #define M 8 //馬可能跳的位置的相對橫縱座標,上、右、下、左 int Movex[M] = {-1,1, 2, 2, 1,-1, -2,-2}; int Movey[M] = { 2,2, 1,-1, -2,-2, -1,1}; //馬跳的時候最多遇到的障礙數 #define B 4 //馬的障礙的位置的相對總橫座標,上、右、下、左 int Barx[B] = {0,1,0,-1}; int Bary[B] = {1,0,-1,0}; typedef struct { int step;//記錄步數 int flag;//標記 }Chessboard;//棋盤型別 typedef struct { int lnum; int rnum;//記錄元素下標 }Queue;//佇列型別 Queue queue[SIZE];//佇列 int rear,front;//佇列指標 Chessboard board[MAX][MAX]; int a,b,c,d,row,line;//起點,終點座標以及行列值 int BFS() { int x0,y0; int mx,my,bx,by; int i; rear=-1; front=-1;//佇列指標初始化 board[a][b].step=0;//起點的步數記為0 board[a][b].flag=1;//起點標記已經進過佇列 rear++; queue[rear].lnum=a; queue[rear].rnum=b;//起點先進佇列 while(front!=rear)//佇列不為空 { front++; x0=queue[front].lnum; y0=queue[front].rnum;//出佇列 if(x0==c && y0==d) return OK;//找到了終點就停止搜尋 for(i=0;i<M;i++)//m=8,共有八個地方可以跳 { //算出值,利用該值來判斷向該方向跳是否有障礙物阻礙 bx = x0+Barx[i/2]; by = y0+Bary[i/2];//用來判斷是否有障礙物 //算出值,利用該值來判斷向該方向上日字的端點處是否有障礙物或已走過 //即下一位置的座標 mx = x0 + Movex[i]; my = y0 + Movey[i]; if(board[bx][by].flag!=-1) { if(mx>0&&mx<=row && my>0&&my<=line && !board[mx][my].flag)//不能越界,board[mx][my].flag必為0 { rear++; queue[rear].lnum=mx; queue[rear].rnum=my;//進佇列 board[mx][my].flag=1;//標記為已經走過 board[mx][my].step=board[x0][y0].step+1;//路徑值是其根部的路徑值加1 }//if }//if }//for }//while return 0; } int main() { int n,m,e,f; int k,i,j; scanf("%d",&n);//一共n組測試資料 for(k=0;k<n;k++) { scanf("%d %d",&row,&line);//輸入棋盤大小 行列 for(i=1;i<=row;i++) for(j=1;j<=line;j++) board[i][j].flag=0;//初始化,全部標記為0 scanf("%d %d %d %d",&a,&b,&c,&d);//輸入起點終點座標值 scanf("%d",&m);//m個障礙 for(i=0;i<m;i++) { scanf("%d %d",&e,&f); board[e][f].flag=-1;//障礙點標記為-1 } if(BFS()) printf("%d\n",board[c][d].step); else printf("can not reach!\n"); } return 0; }
相關推薦
課程設計——中國象棋中的跳馬問題
此題是一個搜尋題,可用DFS或BFS,建議選擇BFS(廣搜)。一開始把馬的起始點加入佇列,然後用廣搜的思想把此點能到達的其他點加入佇列,這裡需要一個數組用來記錄此點在之前是否已經加入佇列,如果加入過隊列當中,就不需要再加入了,直到佇列裡的元素為空,或者搜尋到了終點,搜尋即停止,然後輸出相應答案即可。參考
中國象棋中的跳馬問題
題目描述 現在棋盤的大小不一定,由p,q給出,並且在棋盤中將出現障礙物(限制馬的行動,與象棋走法相同) 輸入 第一行輸入n表示有n組測試資料。 每組測試資料第一行輸入2個整數p,q,表示棋盤的大小(1<=p,q<=100)。 每組測試資料第二行輸
BFS:中國象棋中的跳馬問題
問題描述是這樣的: 有一張p*q的棋盤,並且棋盤中有障礙物(用來限制馬的行動,即中國象棋中的蹩馬腿)。有一個棋子馬(走“日”字形路線),要從起始點走到終點。 輸入部分: 第一行輸入一個整數n,表示有n組測試例項,每組測試資料第一行輸入兩個整數p和q,表示棋盤的大小(1&l
團隊-中國象棋遊戲-設計文檔
象棋 div 不同 目標 變化 自己的 成員 註意 同時 成員:張明成 張洪劍 張鴻程 趙建輝 徐宏璇 喻政博 目標:1.繪制象棋棋盤 2.在指定位置繪制棋子 3.各棋子按規則行子。馬跳“日”字、象走“
團隊-團隊編程項目中國象棋-代碼設計規範
項目 ctype utf-8 之間 char 寫入 特殊情況 script 類型 html書寫規範 1. 文檔類型聲明及編碼: 統一為html5聲明類型<!DOCTYPE html>; 編碼統一為<meta charset=”gbk” />, 書寫時
中國象棋程式的設計與實現 一 專案截圖
上週一發表了,中國象棋程式的設計與實現(原始版)(包含原始碼) ,在一週的時間裡,有22次下載,700次訪問,還是挺讓我欣喜的。 本週和下週,將陸續發表中國象棋程式的設計與實現(高階版),包括 專案截圖,畢業論文,架構圖,開發日誌記錄,演算法設計等,更重要的是 專案的原始碼。簡
Java課程設計:捕獲圖片以及識別圖中的文字
lean 方式 最簡 文件名 println otf jpeg robot nap 本人承接各種高校C語言、C++、Java語言等課程設計以及ppt等制造,有需要的私信我或者微信18476275715 屏幕捕捉工具 要求: 用圖形用戶界面實現。 能實現捕捉屏幕上的圖片、文字
中國象棋對局軟體設計(一)
以下依模式設計,完成的中國象棋的設計草稿(一) 整個對局程式由主控類TChessPlayCtrl控制。首先初始化棋局的初態,包括棋局初態(ChessState)、兩個棋手(CPlayer)、棋手之間傳遞的訊息(Mesg),然後進入主控程式,決定首先走棋方THEPLAYER:
中國象棋程式的設計與實現(四)-- 一次“流產”的寫書計劃
1.寫書緣由2010年寫完中國象棋程式(程式碼)後,我想認真完善下這個專案。在寫程式碼過程中,我已經加入了大量的註釋。寫完後,我開始撰寫相關文件。由於自己讀的是軟體工程專業,所以我想把需求分析、架構設計、詳細設計、測試等文件都認真地寫一下。認真的說,我確實都寫了。在細化文件
中國象棋程式的設計與實現(八)-如何構造一個棋子(車馬炮等)
本篇詳細介紹,在中國象棋程式中,如何構造一個棋子。1.棋子類的定義。 public class ChessPiece extends JLabel 棋子是一個繼承自JLabel的圖形介面元件,當新增到棋盤中的時候,看起來比較美觀。 2.棋子類的屬性。/*
匯編課程設計
cal add dword sta bsp 定義 codes 格式化 click assume cs:codesg,ss:stack data segment db ‘1975‘,‘1976‘,‘1977‘,‘1978‘,‘1979‘,‘198
課程設計 問題 R: 自來水管道
i++ class 間接 color 應該 表示 數組 == 課程 題目描述 你領到了一個鋪設校園內自來水管道的任務。校園內有若幹需要供水的點,每兩個供水點可能存在多種鋪設路徑。對於每一種鋪設路徑,其成本是預知的。 任務要求最終鋪設的管道保證任意兩點可以
Android課程設計第二天界面排版
fit span widget mipmap only get pro 其他 orien 註意:課程設計只為完成任務,不做細節描述~ 老師叫我們做一個這個樣子,然後.. 1 <?xml version="1.0" encoding="utf-8"?>
軟件工程課程設計指導隨筆
求學 課程設計 測試 沒有 收獲 業務 加工 詳細講解 課程 本學期帶14信息01班的《軟件工程課程設計》,已經進入了尾聲。 兩周的課程設計,要求學生完成一個多角色的智能菜單系統,課程設計的任務是要求根據不同角色控制訪問每個菜單項的權限,用戶允許有多個角色;角色和用戶都可以
Android課程設計第四天ListView運用
cnblogs super ces getc clas odin long sad tools 註意:課程設計只為完成任務,不做細節描述~ 效果圖 1 <?xml version="1.0" encoding="utf-8"?> 2 <Relat
Android課程設計第五天歡迎界面(滑動)
col color oncreate apt cli ctsc star .cn ges 註意:課程設計只為完成任務,不做細節描述~ 滑動界面 1 package com.example.myapplication; 2 3 import android
會場安排課程設計
while all got gin 開始時間 gree std 數組 n) 給一些活動,要求分配會場。 #include<stdio.h>#include<stdlib.h>int greedySelector(int *s,int *f,int l
動態規劃 BZOJ1801 [Ahoi2009]chess 中國象棋
vtp size bom hint sizeof ecg 然而 cda 中國象棋 1801: [Ahoi2009]chess 中國象棋 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1861 Solved: 1068[Su
bzoj 1801: [Ahoi2009]chess 中國象棋
std stream 一個數 space 兩個 blog mat 多少 並且 Description 在N行M列的棋盤上,放若幹個炮可以是0個,使得沒有任何一個炮可以攻擊另一個炮。 請問有多少種放置方法,中國像棋中炮的行走方式大家應該很清楚吧. Input 一行包含兩個整數
洛谷 P3650 [USACO1.3]滑雪課程設計Ski Course Design
scanf sign nbsp 整數 單位 std sig inline 說明 題目描述 農民約翰的農場裏有N座山峰(1<=N<=1000),每座山都有一個在0到100之間的整數的海拔高度。在冬天,因為山上有豐富的積雪,約翰經常開辦滑雪訓練營。 不幸的是,約翰剛