程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> SDUT 1124-飛躍原野--三維BFS

SDUT 1124-飛躍原野--三維BFS

編輯:C++入門知識

SDUT 1124-飛躍原野--三維BFS


飛躍原野

Time Limit: 5000ms Memory limit: 65536K 有疑問?點這裡^_^

題目描述

勇敢的法裡奧出色的完成了任務之後,正在迅速地向自己的基地撤退。但由於後面有著一大群追兵,所以法裡奧要盡快地返回基地,否則就會被敵人逮住。

終於,法裡奧來到了最後的一站:泰拉希爾原野,穿過這裡就可以回到基地了。然而,敵人依然緊追不捨。不過,泰拉希爾的地理條件對法裡奧十分有利,眾多的湖泊隨處分布。敵人需要繞道而行,但法裡奧還是決定找一條能盡快回到基地的路。

假設泰拉希爾原野是一個m*n的矩陣,它有兩種地形,P表示平,L表示湖泊,法裡奧只能停留在平地上。他目前的位置在左上角(1,1)處,而目的地為右下角的(m,n)。法裡奧可以向前後左右4個方向移動或飛行,每移動1格需要1單位時間。而飛行的時間主要花費在變形上,飛行本身時間消耗很短,所以無論一次飛行多遠的距離,都只需要1單位時間。飛行的途中不能變向,並且一次飛行最終必須要降落到平地上。當然,由於受到能量的限制,法裡奧不能無限制飛行,他總共最多可以飛行的距離為D。在知道了以上的信息之後,請你幫助法裡奧計算一下,他最快到達基地所需要的時間。

輸入

第一行是3個整數,m(1≤m≤100),n(1≤n≤100),D(1≤D≤100)。表示原野是m*n的矩陣,法裡奧最多只能飛行距離為D。接下來的m行每行有n個字符,相互之間沒有空格。P表示當前位置是平地,L則表示湖泊。假定(1,1)和(m,n)一定是平地。

輸出

一個整數,表示法裡奧到達基地需要的最短時間。如果無法到達基地,則輸出impossible。

示例輸入

4 4 2
PLLP
PPLP
PPPP
PLLP

示例輸出

5

QAQ用二維的bfs怒搜8個方向就是過不去,Wjj說是要狀態同步只能用三維,sad 還是對三維比較不敏感,沒往那方面想。
這道題,以行和列為x,y,以飛行距離D為z 建立三維搜索思想,然後每次在4個方向分別讓它行走和飛行。其他的沒什麼了。
#include //BFS
#include 
#include 
#include 
#include 
using namespace std;
char ma[110][110];
bool vis[110][110][110];
typedef struct node
{
	int x,y,d,time;
};
int n,m,d;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void bfs()
{
  queue  Q;
  node t;int i,j;
  t.x=0;t.y=0;t.time=0;t.d=d;
  Q.push(t);
  while(!Q.empty())
  {
  	node v=Q.front(); Q.pop();
  	if(v.x==m-1&&v.y==n-1)
	{
		cout<=0&&t.x=0&&t.y=0&&t.x=0&&t.y>m>>n>>d)
	{
		memset(vis,0,sizeof(vis));
		for(i=0;i>ma[i];
		bfs();
	}
    return 0;
}





  • 提交
  • 狀態
  • 討論

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved