为什么最后一个点T飞了?感觉跟第三篇题解差不多啊。
#include<bits/stdc++.h>
using namespace std;
int t,n,x[101],y[101];
bool vis[201][201];
queue<pair<int,int> >q;
int main(){
cin>>t;
while(t--){
memset(vis,0,sizeof vis);
while(q.size()) q.pop();
cin>>n;
for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
q.push({100,100});
//vis[100][100]=1;
while(q.size()){
pair<int,int>u=q.front();
q.pop();
if(vis[u.first][u.second]) continue;
vis[u.first][u.second]=1;
if(vis[101][100]&&vis[99][100]&&vis[100][101]&&vis[100][99]){
puts("TAK");
goto T2;
}
for(int i=1;i<=n;i++){
if(u.first+x[i]>200||u.second+y[i]>200||u.first+x[i]<0||u.second+y[i]<0) continue;
if(!vis[u.first+x[i]][u.second+y[i]]) q.push({u.first+x[i],u.second+y[i]});
}
}
puts("NIE");
T2:;
}
}