为什么一直0分?这道题还不能查看数据啊....

P3395 路障

```cpp #include <stdio.h> #include <string.h> int dx[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int que[5000001][3],b[1001][1001],a1[1001],a2[1001],v; void BFS(int sum,int n) { memset(que,0,sizeof(que)); memset(b,0,sizeof(b)); int tail=1,head=0,p=1; que[tail][0]=1; que[tail][1]=1; que[tail][2]=0; b[1][1]=1; do { head++; b[a1[que[head][2]]][a2[que[head][2]]]=1; for (int i=0;i<4;i++) { int x1=que[head][0]+dx[i][0]; int y1=que[head][1]+dx[i][1]; if (x1==n && y1==n) { v=1; return ; } if (x1>=1 && x1<=n && y1>=1 && y1<=n && b[x1][y1]==0) { tail++; que[tail][0]=x1; que[tail][1]=y1; b[x1][y1]=1; que[tail][2]=que[head][2]+1; } } }while (head<tail); } int main() { int t,n; scanf("%d",&t); while (t>=1) { t--; scanf("%d",&n); int k=2*n-2; for (int i=1;i<=k;i++) scanf("%d %d",&a1[i],&a2[i]); v=0; BFS(k,n); if (v) printf("Yes\n"); else printf("No\n"); } return 0; } 现在40分了 ```
by Sakura_Peng @ 2017-10-23 21:40:14


```cpp #include <stdio.h> #include <string.h> int dx[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; int que[5000001][3],b[1001][1001],a1[1001],a2[1001],v; void BFS(int sum,int n) { memset(que,0,sizeof(que)); memset(b,0,sizeof(b)); int tail=1,head=0,p=1; que[tail][0]=1; que[tail][1]=1; que[tail][2]=1; b[1][1]=1; do { head++; b[a1[que[head][2]]][a2[que[head][2]]]=1; for (int i=0;i<4;i++) { int x1=que[head][0]+dx[i][0]; int y1=que[head][1]+dx[i][1]; if (x1>=1 && x1<=n && y1>=1 && y1<=n && b[x1][y1]==0) { if (x1==n && y1==n) { v=1; return ; } tail++; que[tail][0]=x1; que[tail][1]=y1; b[x1][y1]=1; que[tail][2]=que[head][2]+1; } } }while (head<tail); } int main() { int t,n; scanf("%d",&t); while (t>=1) { t--; scanf("%d",&n); int k=2*n-2; for (int i=1;i<=k;i++) scanf("%d %d",&a1[i],&a2[i]); v=0; BFS(k,n); if (n==1) v=1; if (v) printf("Yes\n"); else printf("No\n"); } return 0; } 60分了,这就比较GG了 ```
by Sakura_Peng @ 2017-10-23 21:57:15


过了,发现是因为数组开小了 ```cpp #include <stdio.h> #include <string.h> int dx[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; int que[5000001][3],b[1001][1001],a1[3001],a2[3001],v; void BFS(int n) { memset(que,0,sizeof(que)); memset(b,0,sizeof(b)); int tail=1,head=0; que[tail][0]=1; que[tail][1]=1; que[tail][2]=1; b[1][1]=1; do { head++; // b[a1[que[head][2]]][a2[que[head][2]]]=1; for (int i=0;i<4;i++) { //b[a1[que[head][2]]][a2[que[head][2]]]=1; int x1=que[head][0]+dx[i][0]; int y1=que[head][1]+dx[i][1]; if (x1>=1 && x1<=n && y1>=1 && y1<=n && b[x1][y1]==0) { if (x1==n && y1==n) { v=1; return ; } tail++; que[tail][0]=x1; que[tail][1]=y1; b[x1][y1]=1; que[tail][2]=que[head][2]+1; } /*if (que[tail][0]==n && que[tail][1]==n) { v=1; return ; } ``` \*/ ```cpp //b[a1[que[head][2]]][a2[que[head][2]]]=1; } b[a1[que[head][2]]][a2[que[head][2]]]=1; }while (head<tail); } int main() { int t,n; scanf("%d",&t); while (t>=1) { t--; scanf("%d",&n); int k=2*n-2; for (int i=1;i<=k;i++) scanf("%d%d",&a1[i],&a2[i]); v=0; BFS(n); if (n==1 ) v=1; memset(a1,0,sizeof(a1)); memset(a2,0,sizeof(a2)); if (v) printf("Yes\n"); else printf("No\n"); } return 0; } ```
by Sakura_Peng @ 2017-10-24 22:46:03


|