---
# System prepended metadata

title: ZeroJudge d453. 最短距離
tags: [ZeroJudge, APCS, C++]

---

# ZeroJudge d453. 最短距離
[d453. 最短距離 (題目連結)](https://zerojudge.tw/ShowProblem?problemid=d453)
<font color="#00CE17">**AC**</font> **(2ms, 344KB)**
```cpp=
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define x first
#define y second

int main(){
	
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int n;
	cin>>n;
	while(n--){
		int n, m, bx, by, ex, ey;
		cin>>n>>m>>bx>>by>>ex>>ey;
		int dx[4]={0, 0, 1, -1};
		int dy[4]={-1, 1, 0, 0};
		bx--, by--, ex--, ey--;
		int map[n][m];
		string data;
		for(int i=0; i<n; i++){
			cin>>data;
			for(int j=0; j<m; j++){
				map[i][j]=data[j]-'0';
			}
		}
		int sc[n][m];
		queue <pair<int, int>> q;
		q.push({bx, by});
		memset(sc, -1, sizeof(sc));
		sc[bx][by]=1;
		while(!q.empty()){
			pair<int, int> now;
			now=q.front();
			q.pop();
			for(int i=0; i<4; i++){
				int xx=now.x+dx[i], yy=now.y+dy[i];
				if(xx>=0 && xx<n && yy>=0 && yy<m){
					if(map[xx][yy]==0 && sc[xx][yy]==-1){
						q.push({xx, yy});
						sc[xx][yy]=sc[xx-dx[i]][yy-dy[i]]+1;
					}
				}
			}
		}
		if(sc[ex][ey]==-1) cout<<0<<'\n';
		else cout<<sc[ex][ey]<<'\n';
	}
	
	return 0;
}
```
###### 闕以諾 2022/7/20
###### tags: `C++` `ZeroJudge` `APCS` 