洛谷——P1605 迷宫
生活随笔
收集整理的這篇文章主要介紹了
洛谷——P1605 迷宫
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目背景
迷宮 【問題描述】
給定一個N*M方格的迷宮,迷宮里有T處障礙,障礙處不可通過。給定起點坐標和
終點坐標,問: 每個方格最多經過1次,有多少種從起點坐標到終點坐標的方案。在迷宮
中移動有上下左右四種方式,每次只能移動一個方格。數據保證起點上沒有障礙。
輸入樣例 輸出樣例
【數據規模】
1≤N,M≤5
題目描述
輸入輸出格式
輸入格式:
?
【輸入】
第一行N、M和T,N為行,M為列,T為障礙總數。第二行起點坐標SX,SY,終點
坐標FX,FY。接下來T行,每行為障礙點的坐標。
?
輸出格式:
?
【輸出】
給定起點坐標和終點坐標,問每個方格最多經過1次,從起點坐標到終點坐標的方
案總數。
?
輸入輸出樣例
輸入樣例#1:?復制
2 2 1 1 1 2 2 1 2輸出樣例#1:?復制
1AC:
基礎的dfs題目
#include <iostream> using namespace std;int n, m, t; //n行,m列,t個障礙 int sx, sy, ex, ey; //起點終點坐標 int map[7][7] = {0}; //0可走,1為障礙 bool vis[7][7] = {false}; //訪問數組 int ans = 0; //方案數void dfs(int x, int y) {if (x < 1 || x > n || y < 1 || y > m){return;}if(x == ex && y == ey){ans++;return;}vis[x][y] = true;if (map[x+1][y] != 1 && vis[x+1][y] == false) dfs(x+1, y);if (map[x-1][y] != 1 && vis[x-1][y] == false) dfs(x-1, y);if (map[x][y+1] != 1 && vis[x][y+1] == false) dfs(x, y+1);if (map[x][y-1] != 1 && vis[x][y-1] == false) dfs(x, y-1);vis[x][y] = false; }int main() {scanf("%d%d%d", &n, &m, &t);scanf("%d%d%d%d", &sx, &sy, &ex, &ey);for (int k = 0; k < t; k++){int a, b;scanf("%d%d",&a, &b);map[a][b] = 1;}dfs(sx,sy);printf("%d", ans);return 0; }?
總結
以上是生活随笔為你收集整理的洛谷——P1605 迷宫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷——P1219 八皇后
- 下一篇: 洛谷——P1092 虫食算