南陽58 最少步數
最少步數
時間限制:3000 ms | 記憶體限制:65535 KB 難度:4- 描述
-
這有一個迷宮,有0~8行和0~8列:
1,1,1,1,1,1,1,1,1
1,0,0,1,0,0,1,0,1
1,0,0,1,1,0,0,0,1
1,0,1,0,1,1,0,1,1
1,0,0,0,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,0,0,0,1
1,1,1,1,1,1,1,1,10表示道路,1表示牆。
現在輸入一個道路的座標作為起點,再如輸入一個道路的座標作為終點,問最少走幾步才能從起點到達終點?
(注:一步是指從一座標點走到其上下左右相鄰座標點,如:從(3,1)到(4,1)。)
- 輸入
- 第一行輸入一個整數n(0<n<=100),表示有n組測試資料;
隨後n行,每行有四個整數a,b,c,d(0<=a,b,c,d<=8)分別表示起點的行、列,終點的行、列。 - 輸出
- 輸出最少走幾步。
- 樣例輸入
-
2 3 1 5 7 3 1 6 7
- 樣例輸出
-
12 11
#include<stdio.h> #include<string.h> #include<queue> #include<limits.h> using std::queue; int map[9][9]={ 1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1 }; int vis[9][9]; struct Node { int x,y; int step; }end,cur,next; int x_move[]={0,0,1,-1}; int y_move[]={1,-1,0,0}; bool judge() { if(next.x>=0&&next.x<9&&next.y>=0&&next.y<9&&!map[next.x][next.y]) return 1; return 0; } void BFS() { queue<Node>q; for(int i=0;i<9;i++) for(int j=0;j<9;j++) vis[i][j]=INT_MAX; while(!q.empty())q.pop(); //printf("%d\n",q.front().step); cur.step=0;//當前步數要初始化,否則會在上一次的基礎上相加 next=cur; vis[cur.x][cur.y]=0;//記得將第一步初始化 for(int i=0;i<4;i++) { next=cur; next.x+=x_move[i]; next.y+=y_move[i]; if(vis[next.x][next.y]==INT_MAX&&!map[next.x][next.y]) { next.step++; vis[next.x][next.y]=next.step; q.push(next); } } while(!q.empty())//q.size();也可以 { cur=q.front(); // printf("%d ",cur.step); q.pop(); for(int i=0;i<4;i++) { next=cur; next.x+=x_move[i]; next.y+=y_move[i]; if(vis[next.x][next.y]==INT_MAX&&judge()) { next.step++; // if(vis[next.x][next.y]>next.step); vis[next.x][next.y]=next.step; //printf("%d ",vis[next.x][next.y]); q.push(next); } } } printf("%d\n",vis[end.x][end.y]); }; int main() { int N; scanf("%d",&N); while(N--) { scanf("%d%d%d%d",&cur.x,&cur.y,&end.x,&end.y); BFS(); /* for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { printf("%d ",a[i][j]); } printf("\n"); } */ } return 0; }
相關推薦
南陽58 最少步數
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,
南陽理工OJ_題目58 最少步數
#include <iostream> #include <queue> #include <cstring> using namespace std; int bfs(); struct data { int x;
南陽理工58最少步數
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1
NYOJ 58 最少步數 (深搜)
1.遞迴的邊界: 走到終點座標, 即(x == x2 && y == y2); 2.遞迴進行的條件: for迴圈的 4個方向(定義了一個方向陣列move)進行遞迴: 判斷條件:若為路 && 未標記 && 不越界, 則繼續遞迴;
NYOJ 58 最少步數問題
//修改版#include<stdio.h> #include<string.h> int arr[9][9] = { 1,1,1,1,1,1,1,1,1, 1,0,0
NYOJ 題目58 最少步數(BFS)
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,
NYOJ 58 最少步數
(一)深搜法: 1.遞迴的邊界: 走到終點座標, 即(x == x2 && y == y2); 2.遞迴進行的條件: for迴圈的 4個方向(定義了一個方向陣列move)進行遞迴: 判斷條件:若為路 && 未標記 && 不越
nyoj 58 最少步數(BFS)
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,
NYOJ 58 最少步數(廣搜入門經典)
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,
nyoj-題目58-最少步數【DFS】
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,
nyoj 58-最少步數
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,
nyoj-58 最少步數
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0
58 最少步數【bfs】
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,
最少步數 NYOJ 58
最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,
DFS && BFS 最少步數(nyoj 58)
最少步數 最少步數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:4 描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0
POJ 3126 Prime Path【從一個素數變為另一個素數的最少步數/BFS】
lan mem 奇數 offices ring finance primes iostream int Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted:
【多次過】Lintcode 1231. 使陣列元素相同的最少步數
給定一個大小為n的非空整數陣列,找出使得陣列中所有元素相同的最少步數,其中一步被定義為將陣列中n - 1個元素加一。 樣例 輸入: [1,2,3] 輸出: 3 說明: 只需要三步即可(每一步將其中兩個元素加一): [1,2,3] => [2,3,3] =
有自己的程式碼--題目:給定一個數組,裡面全是正整數。數字大小表示這一步最多可以向後移動幾個節點。總是從陣列第一個元素開始移動。問如何移動,可以以最少步數移動到最後一個節點。
原文:https://yq.aliyun.com/articles/547799 描述: 題目:給定一個數組,裡面全是正整數。數字大小表示這一步最多可以向後移動幾個節點。總是從陣列第一個元素開始移動。問如何移動,可以以最少步數移動到最後一個節點。 例如:[3,4,2
hdu 3434 給你含有n個數的序列,每次你可以選一個子序列將上面所有的數字加1或者減1,目標是把所有數字變成相同的,問最少步數,和那個相同的數字有多少種可能
Problem Description Given a sequence consists of N integers. Each time you can choose a continuous subsequence and add 1 or minus 1 to
最少步數 (bfs最短路徑)
描述 這有一個迷宮,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0