用一个二维数组记录从四个方向到达该障碍物的次数,如果同一个方向到达该障碍物两次,那么就一定可以转无数次弯。
做题的时候心态要好啊。。
#include#include #include #include #include #include #include #define maxn 1005#define inf 0x3f3f3f3fusing namespace std;typedef struct{ int x,y;}P;P a[maxn];int v[4][maxn];int ans,n,flag;void solve(){ P c; c.x=0,c.y=0; int flag1,f; flag1=1; while(1) { // cout<<"flag "< <<" "< <<" "< < a[i].y&&ma a[i].x&&a[i].x>ma) { ma=a[i].x; f=0; j=i; } } if(f) return; else { if(v[2][j]){flag=1;return;} c.x=ma+1; ans++; flag1=4; v[2][j]=1; } } else if(flag1==4) { for(int i=1;i<=n;i++) { if(c.x==a[i].x&&c.y a[i].y) { mi=a[i].y; f=0; j=i; } } if(f) return ; else { if(v[3][j]) {flag=1;return;} c.y=mi-1; ans++; flag1=1; v[3][j]=1; } } }}int main(){ while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); ans=0; flag=0; memset(v,0,sizeof(v)); solve(); if(flag) printf("-1\n"); else printf("%d\n",ans); } return 0;}