日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

01迷宫(洛谷-P1141)

發布時間:2025/3/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 01迷宫(洛谷-P1141) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

有一個僅由數字0與1組成的n×n格迷宮。若你位于一格0上,那么你可以移動到相鄰4格中的某一格1上,同樣若你位于一格1上,那么你可以移動到相鄰4格中的某一格0上。

你的任務是:對于給定的迷宮,詢問從某一格開始能移動到多少個格子(包含自身)。

輸入輸出格式

輸入格式:

輸入的第1行為兩個正整數n,m。

下面n行,每行n個字符,字符只可能是0或者1,字符之間沒有空格。

接下來m行,每行2個用空格分隔的正整數i,j,對應了迷宮中第i行第j列的一個格子,詢問從這一格開始能移動到多少格。

輸出格式:

輸出包括m行,對于每個詢問輸出相應答案。

輸入輸出樣例

輸入樣例#1:

2 2
01
10
1 1
2 2

輸出樣例#1:

4
4

源代碼

#include<iostream> using namespace std;int n,m,x,y; int a[1001][1001]; char ch[1010][1010]; int judge[1001][1001]; int sum; int original_x[1001][1001]={0}; int original_y[1001][1001]={0}; int current_x, current_y; void dfs(int x, int y);int main() {int i,j;cin>>n>>m;//輸入迷宮大小n與詢問答案數mfor(i=1;i<=n;i++){for(j=1;j<=n;j++){ cin>>ch[i][j];a[i][j]=ch[i][j]-48;}}for(i=1;i<=n;i++)//設置邊界,便于判重for(j=1;j<=n;j++)judge[i][j]=-1;for(i=1;i<=m;i++){sum=0;//步數清零cin>>x>>y;//輸入詢問答案的坐標if(judge[original_x[x][y]][original_y[x][y]]>0)//判斷當前點是不是以前搜索過的 {cout<<judge[original_x[x][y]][original_y[x][y]]<<endl;continue;}current_x=x;//記錄當前點坐標xcurrent_y=y;//記錄當前點坐標ydfs(x,y);//開始搜索cout<<sum<<endl;judge[x][y]=sum;//記錄當前步驟,用于判斷original_x[x][y]=x;original_y[x][y]=y;}return 0; }void dfs(int x, int y) {int direction_x[4]={1,-1,0,0,},direction_y[4]={0,0,1,-1};//方向坐標int i; if(x>n||x<1||y>n||y<1)//搜索終止條件return;if(judge[x][y]!=-1)//記憶化搜索,判重 return;sum++;//步數+1original_x[x][y]=current_x;//更改坐標xoriginal_y[x][y]=current_y;//更改坐標yjudge[x][y]=0;//標記當前點for(i=0;i<4;i++){if(a[x+direction_x[i]][y+direction_y[i]]!=a[x][y])//與當前坐標不符時dfs(x+direction_x[i],y+direction_y[i]);//進一步搜索} }

?

總結

以上是生活随笔為你收集整理的01迷宫(洛谷-P1141)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。