1. 程式人生 > 其它 >洛谷 P1443 馬的遍歷

洛谷 P1443 馬的遍歷

題目連結 https://www.luogu.com.cn/problem/P1443

又是一道bfs的模板題,和mzc男家丁那道題可以說是基本一樣的,唯一不同的就是輸入輸出不同。

感覺我至少需要做兩三道模板題才能進行更高難度的題目(bena)...

而且剛學佇列需要好好熟悉一下(為自己找藉口ing

那就再去做一道模板就不做了!


放AC程式碼

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,sx,sy;
 4 int dis[410][410];//記錄距離
 5 bool vis[410][410];//標記陣列
 6 const
int dx[9]={0,-2,-2,-1,1,2,2,1,-1}; 7 const int dy[9]={0,-1,1,2,2,1,-1,-2,-2}; 8 struct node 9 { 10 int x; 11 int y; 12 }; 13 int bfs(int bx,int by) 14 { 15 vis[bx][by]==true; 16 queue<node>q; 17 node start,next; 18 start.x=bx; 19 start.y=by; 20 q.push(start); 21
while(!q.empty()) 22 { 23 start=q.front(); 24 q.pop(); 25 for(int i=1;i<=8;i++) 26 { 27 next.x=start.x+dx[i]; 28 next.y=start.y+dy[i]; 29 if(next.x<=0||next.x>n||next.y<=0||next.y>m)//避免越界 30 continue
; 31 if(vis[next.x][next.y]==true||(next.x==sx&&next.y==sy)) 32 continue; 33 dis[next.x][next.y]=dis[start.x][start.y]+1; 34 vis[next.x][next.y]=true; 35 q.push(next); 36 } 37 } 38 return -1; 39 } 40 int main() 41 { 42 ios::sync_with_stdio(false);//快讀 43 cin>>n>>m>>sx>>sy; 44 vis[sx][sy]=true; 45 dis[sx][sy]=0;//起始點為0 46 bfs(sx,sy); 47 for(register int i=1;i<=n;i++) 48 { 49 for(register int j=1;j<=m;j++) 50 { 51 if(vis[i][j]==false) cout<<left<<setw(5)<<-1; 52 else cout<<left<<setw(5)<<dis[i][j]; 53 } 54 cout<<endl; 55 } 56 }