代码看的我累死了,乍一看跟我的一样啊,自习对比,还是有问题的。
首先是输出格式的问题,样例输出“Board #1:”,而且题目说了,“Output a blank line after each board”。
然后
把这一段改为
最后一个错误,在if(vis[x2][y2]==-1) printf("Pair %d: impossible.\n", cnt++);前面应该加上语句str[x1][y1]=str[x2][y2]='X';因为后面判断其他情况时,要将其还原。
首先是输出格式的问题,样例输出“Board #1:”,而且题目说了,“Output a blank line after each board”。
然后
程序代码:
for(int i=0; i<=h+1; i++) { memset(str[i],0,sizeof(str[i])); memset(vis[i],-1,sizeof(vis[i])); }这样的初始化是有问题的,你把str[i]都清空了,后面怎么判断,而且memset(vis[i],-1,sizeof(vis[i]));并不能使vist的每一项赋为-1,注意vist是二维!
把这一段改为
for(i=0;i<=h+1;i++) for(j=0;j<=w+1;j++) vis[i][j]=-1; str[x1][y1]=str[x2][y2]=' ';//必须使得起始点为可行点第三,BFS的while判断条件不对,既然前面已经初始化vist为-1,那么这里应该是&&vis[tmp.x][tmp.y]==-1,而不是&&!vis[top.x+x[i]][top.y+y[i]]),tmp的值在执行语句里面已经改变了,不能再用top+x来表达。
最后一个错误,在if(vis[x2][y2]==-1) printf("Pair %d: impossible.\n", cnt++);前面应该加上语句str[x1][y1]=str[x2][y2]='X';因为后面判断其他情况时,要将其还原。
********多贴代码,少说空话*******