NYOJ 58 最少步數問題
//修改版
#include<stdio.h> #include<string.h> int arr[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 book[9][9]; int Next[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int starx, stary, endx, endy; int min_step = 999999; void DFS(int x, int y,int step) { if(x == endx && y == endy) { if(step < min_step) min_step = step; return ; } int i,tempx,tempy; for(i = 0;i<4;i++) { tempx = x + Next[i][0]; tempy = y + Next[i][1]; if(tempx < 1 || tempx > 8 || tempy < 1 || tempy > 8) continue; if(arr[tempx][tempy] == 0 && book[tempx][tempy] == 0) { book[tempx][tempy] = 1; DFS(tempx,tempy,step + 1); book[tempx][tempy] = 0; } } return ; } int main() { int N; scanf("%d",&N); while(N--) { min_step = 999999; scanf("%d %d %d %d",&starx,&stary,&endx,&endy); memset(book, 0, sizeof(book)); book[starx][stary] = 1; DFS(starx,stary,0); printf("%d\n",min_step); } return 0; }
//兩個月後重新看這個感覺簡單了很多,優化後:
#include<cstdio> #define min(x,y) x>y?y:x int arr[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 a, b, ea, eb, min_step; void dfs(int x, int y, int step) { if(arr[x][y]) return ; if(x == ea && y == eb) { min_step = min(step,min_step); return ; } arr[x][y] = 1; dfs(x+1,y,step+1); dfs(x,y+1,step+1); dfs(x-1,y,step+1); dfs(x,y-1,step+1); arr[x][y] = 0; } int main() { int n; scanf("%d",&n); while(n--) { min_step = 0xfffff; scanf("%d%d%d%d",&a,&b,&ea,&eb); dfs(a, b, 0); printf("%d\n",min_step); } }
相關推薦
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 最少步數
(一)深搜法: 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-最少步數
最少步數 時間限制: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
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-最少步數【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 54 最少步數
廣搜問題,每個步驟的含義都寫在程式碼裡面了。歡迎大家相互交流, 程式碼: #include<iostream> #include<stdio.h> #include<queue> #include<cstring> usi
南陽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;
NYOJ 54最少步數
這道題關鍵的就是怎麼用佇列去儲存訪問的節點,用結構體,在用c++的佇列,其他的就是基本的bfs 別人的程式碼 #include<iostream> #include<stdio.h> #include<queue> #include&l
南陽理工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
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
NYoj最少步數(DFS)
描述 這有一個迷宮,有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,
NYOJ 58 最小步數
最小步數 題目資訊:這道題就是一個簡單的迷宮搜尋,可以用佇列作簡單模擬。 原始碼: #include<stdio.h> #include<string.h> #include<queue> using namespace std;
nyoj 46-最少乘法次數 (遞推)
sca C/C++ ron content itl 輸入 一次 align IV 46-最少乘法次數 內存限制:64MB 時間限制:1000ms