洛谷评测机
此问题由洛谷p1746引出(之前出过类似问题没在意)
以下是两个差不多的程序,(只有main函数中的输入不同,第一个程序迷之WA,第二个程序AC)
#include <bits/stdc++.h> using namespace std; int qx,qy,zx,zy; int n,m; int xx[5] = {0,0,0,-1,1},yy[5] = {0,-1,1,0,0}; char a[1001][1001]; queue<int>q; int tot[1001][1001]; int qx,qy,zx,zy; void gs() { while(q.empty() == 0) { int x = q.front(); q.pop(); int y = q.front(); q.pop(); for(int k = 1; k <= 4; k++) { int x2 = x + xx[k]; int y2 = y + yy[k]; if(a[x2][y2] == 0 && x2 >= 1 && y2 >= 1 && x2 <=n && y2 <= m) { q.push(x2); q.push(y2); tot[x2][y2] = tot[x][y] + 1; a[x2][y2] = 1; } if(x2 == zx && y2 == zy) { tot[x2][y2] = tot[x][y] + 1; cout<<tot[x2][y2]<<endl; while(q.empty() == 0){ q.pop(); } memset(tot,0,sizeof(tot)); return ; } } } cout<<-1<<endl; return ; } int main() { scanf("%d%d",&n,&m); getchar(); for(int i=1; i<=n; i++) {//单个字符输入+getcahr()读入换行符 for(int j=1; j<=m; j++) { scanf("%c",&a[i][j]);//这里改成getchar()也不对 } getchar(); } gs(); return 0; }
#include <bits/stdc++.h> using namespace std; int qx,qy,zx,zy; int n; int xx[5] = {0,0,0,-1,1},yy[5] = {0,-1,1,0,0}; char a[1001][1001]; queue<int>q; int tot[1001][1001]; void gs() { while(q.empty() == 0) { int x = q.front(); q.pop(); int y = q.front(); q.pop(); for(int k = 1; k <= 4; k++) { int x2 = x + xx[k]; int y2 = y + yy[k]; if(a[x2][y2] == '0' && x2 >= 1 && y2 >= 1 && x2 <=n && y2 <= n) { q.push(x2); q.push(y2); tot[x2][y2] = tot[x][y] + 1; a[x2][y2] = '1'; } if(x2 == zx && y2 == zy) { tot[x2][y2] = tot[x][y] + 1; cout<<tot[x2][y2]; return ; } } } } int main() { scanf("%d",&n); getchar(); for(int i=1; i<=n; i++) { scanf("%s", a[i] + 1);//整个字符串输入 } scanf("%d%d%d%d",&qx,&qy,&zx,&zy); q.push(qx); q.push(qy); gs(); return 0; }
小结:编译器永远没错,评测机可能有错 别用getchar()
作者: liuzitong
出处:http://www.cnblogs.com/lztzs/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。