用scanf就会WA和RE
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main () {
int fw=1,cw=1,fx,fy,cx,cy,m[15][15],min=0,tdz;//f开头代表农夫,c开头代表牛 ,w代表方向
char map[15][15];
bool exit[211115];
for (int i=0;i<211115;i++) exit[i]=0; //初始化
for (int i=0;i<=12;i++){//边框设障碍
m[0][i]=0;
m[12][i]=0;
m[i][0]=0;
m[i][12]=0;
}
for (int i=1;i<=10;i++){
if (i>1) getchar();//吃掉回车键
for (int j=1;j<=10;j++){
//cin>>map[j][i];
scanf ("%c",&map[j][i]);
switch (map[j][i]){
case '*':m[j][i]=0;break;//0为障碍物
case '.':m[j][i]=1;break; //1为空地
case 'F':m[j][i]=1;fx=j,fy=i;break;
case 'C':m[j][i]=1;cx=j,cy=i;break;
}
//printf ("\n");
//printf ("%d %d\n",i,j);
}
}
while ((fx==cx&&fy==cy)==0){
int fx1=fx,fy1=fy,cx1=cx,cy1=cy;
switch (fw){
case 1:fy1--;break;//1向上
case 2:fx1++;break;//2向右
case 3:fy1++;break;//3向下
case 4:fx1--;break;//4向左
}
if (m[fx1][fy1]==1) fx=fx1,fy=fy1;//不是障碍就移动
else {
if (fw<4) fw++;//是障碍转弯
else fw=1;
}
switch (cw){
case 1:cy1--;break;
case 2:cx1++;break;
case 3:cy1++;break;
case 4:cx1--;break;
}
if (m[cx1][cy1]==1) cx=cx1,cy=cy1;
else {
if (cw<4) cw++;
else cw=1;
}
tdz=fx+fy*10+cx*100+cy*1000+fw*10000+cw*40000;//借鉴题解中的特定值
//printf("%d %d %d %d %d %d\n",fx,fy,fw,cx,cy,cw);
//printf("%d %d\n",tdz,exit[tdz]) ;
if (exit[tdz]==1){
printf ("0");
return 0;
}
exit[tdz]=1;
//printf("%d\n",exit[tdz]) ;
min++;
}
printf ("%d",min);
return 0;
}
用cin就是AC
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main () {
int fw=1,cw=1,fx,fy,cx,cy,m[15][15],min=0,tdz;//f开头代表农夫,c开头代表牛 ,w代表方向
char map[15][15];
bool exit[211115];
for (int i=0;i<211115;i++) exit[i]=0; //初始化
for (int i=0;i<=12;i++){//边框设障碍
m[0][i]=0;
m[12][i]=0;
m[i][0]=0;
m[i][12]=0;
}
for (int i=1;i<=10;i++){
//if (i>1) getchar();//吃掉回车键
for (int j=1;j<=10;j++){
cin>>map[j][i];
//scanf ("%c",&map[j][i]);
switch (map[j][i]){
case '*':m[j][i]=0;break;//0为障碍物
case '.':m[j][i]=1;break; //1为空地
case 'F':m[j][i]=1;fx=j,fy=i;break;
case 'C':m[j][i]=1;cx=j,cy=i;break;
}
//printf ("\n");
//printf ("%d %d\n",i,j);
}
}
while ((fx==cx&&fy==cy)==0){
int fx1=fx,fy1=fy,cx1=cx,cy1=cy;
switch (fw){
case 1:fy1--;break;//1向上
case 2:fx1++;break;//2向右
case 3:fy1++;break;//3向下
case 4:fx1--;break;//4向左
}
if (m[fx1][fy1]==1) fx=fx1,fy=fy1;//不是障碍就移动
else {
if (fw<4) fw++;//是障碍转弯
else fw=1;
}
switch (cw){
case 1:cy1--;break;
case 2:cx1++;break;
case 3:cy1++;break;
case 4:cx1--;break;
}
if (m[cx1][cy1]==1) cx=cx1,cy=cy1;
else {
if (cw<4) cw++;
else cw=1;
}
tdz=fx+fy*10+cx*100+cy*1000+fw*10000+cw*40000;//借鉴题解中的特定值
//printf("%d %d %d %d %d %d\n",fx,fy,fw,cx,cy,cw);
//printf("%d %d\n",tdz,exit[tdz]) ;
if (exit[tdz]==1){
printf ("0");
return 0;
}
exit[tdz]=1;
//printf("%d\n",exit[tdz]) ;
min++;
}
printf ("%d",min);
return 0;
}
两个代码只有输入部分不同。 到底是为什么啊啊啊啊啊啊啊!!! 孩子快疯了。