# 題目
APCS 模擬團隊 OJ apcs0204: 逃脫遊戲 (Game)
# 解題思路
目前沒東西...
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
#define Rabbir_Reaper ios_base::sync_with_stdio(0); cin.tie(0); | |
const int N = 250 +5; | |
int dir[4][2]= {{-1,0},{0,1},{1,0},{0,-1}}; | |
vector<vector<vector<int>>> adj(N,vector<vector<int>>(N,vector<int>(15,-1))); | |
map<pair<int,int>,vector<pair<int,int>>> mp; | |
int main(){ | |
Rabbir_Reaper | |
int n,k,t; | |
cin>>n>>k>>t; | |
for(int i=0,x1,y1,x2,y2;i<k;i++){ | |
cin>>x1>>y1>>x2>>y2; | |
mp[{x1,y1}].push_back({x2,y2}); | |
} | |
queue<vector<int>> qu; | |
qu.push({1,1,0}); | |
adj[1][1][0] = 0; | |
int ans=0; | |
while(!qu.empty()){ | |
vector<int> now = qu.front(); | |
qu.pop(); | |
if(now[0] == n && now[1] == n){ | |
ans = adj[n][n][now[2]]; | |
break; | |
} | |
for(int i=0;i<4;i++){ | |
int tx = now[0] + dir[i][0]; | |
int ty = now[1] + dir[i][1]; | |
if(tx<=0 || ty<=0 || tx>n || ty>n || adj[tx][ty][now[2]]!=-1) continue; | |
adj[tx][ty][now[2]] = adj[now[0]][now[1]][now[2]]+1; | |
qu.push({tx,ty,now[2]}); | |
} | |
for(auto &u:mp[{now[0],now[1]}]){ | |
if(now[2]+1 >= t) continue; | |
if(adj[u.first][u.second][now[2]+1] != -1) continue; | |
adj[u.first][u.second][now[2]+1] = adj[now[0]][now[1]][now[2]]+1; | |
qu.push({u.first,u.second,now[2]+1}); | |
} | |
} | |
cout<<ans; | |
} |