2018焦作区域赛F - Honeycomb

Gym - 102028F
一眼看上去就是一个稍微复杂一点的bfs。
写起来也没遇到太大的障碍,一路顺风顺水写完了。
最后连续wa了三次,检查到头皮发麻也没看出问题。
最后抱着瞎试的心态换掉了setbuf(stdin, NULL);
竟然就a了…

在这里插入图片描述
你说getchar()多好。
关于setbuf(stdin, NULL);为什么不行还不清楚。
还有就是memset()不能乱用,会超时,数组大的话老老实实的for比较好
下面上代码:

#include 
using namespace std;
/*
1
3 4+---+       +---+/     \     /     \
+       +---+       +---+\           \     /     \+   +       +---+   S   +/     \     /           /
+       +---+       +   +\           \     /     \+---+       +---+       +/                       /
+       +---+       +   +\                 /     \+---+       +---+   T   +\     /     \     /+---+       +---+
*/
/*
1
1 2+---+/     \
+   S   +---+\           \+---+   T   +\     /+---+
*/
char in[4010][6010];
int r,c,starti,startj;
int turn[6][2]={{-2,-6},{-2,6},{-4,0},{4,0},{2,-6},{2,6}};
struct node {int x,y,times;node(int a,int b,int c) {x=a,y=b,times=c;}node() {}
};
bool judge1(int x,int y) {if(x<0||x>=4*r+3)return false;if(y<0||y>=6*c+3)return false;if(in[x][y]=='*')return false;return true;
}
bool judge2(int x,int y) {if(in[x][y]=='-'||in[x][y]=='\\'||in[x][y]=='/')return false;return true;
}
int showMap() {for(int i=0;i<4*r+3;i++) {printf("%s\n",in[i]);}
}
int Search() {queue q;q.push(node(starti,startj,1));in[starti][startj]='*';while(!q.empty()) {node temp=q.front();q.pop();if(in[temp.x][temp.y]=='T') {return temp.times;}int x=temp.x,y=temp.y,times=temp.times;for(int i=0;i<6;i++) {if(judge1(x+turn[i][0],y+turn[i][1])&&judge2(x+turn[i][0]/2,y+turn[i][1]/2)) {q.push(node(x+turn[i][0],y+turn[i][1],times+1));if(in[x+turn[i][0]][y+turn[i][1]]!='T')in[x+turn[i][0]][y+turn[i][1]]='*';}}}return -1;
}
int main() {int t;while(~scanf("%d",&t)) {while(t--) {scanf("%d%d",&r,&c);//setbuf(stdin, NULL);getchar();for(int i=0;i<4*r+3;i++) {gets(in[i]);int len=strlen(in[i]);for(int j=0;j


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部