一直RE,程序能过掉给的样例。
查看原帖
一直RE,程序能过掉给的样例。
452063
user1542043226楼主2021/10/2 14:51
#include <bits/stdc++.h>
using namespace std;
int main()
{
   char s[6][6];
    int cnt=1;//循环次数
   while(1){
first: 	int kx,ky;
   	int flagg=1;//判断操作是否超出范围
    for(int i=1;i<=5;i++) 
   	for(int j=1;j<=5;j++)
   	s[i][j]=' ';
   // cout<<1111111<<endl;
    for(int i=1;i<=5;i++){
    	int flag=0;
   	for(int j=1;j<=5;j++){
   	s[i][j]=getchar();
   	if(s[i][j]=='\n') flag=1;//判断输出了几个回车,有一个了的话,下面就不用getchar()去接收回车了
   	if (s[1][1]=='Z') return 0;//遇到Z停止
//   	cout<<kx<<" "<<ky<<endl;
    if(s[i][j]=='\n')s[i][j]=' ';//将输入的回车变为空格
    //cout<<s[5][5]<<endl;
   	if(s[i][j]==' ')   {
   		kx=i,ky=j;
   	//	cout<<kx<<" "<<ky<<endl;
	   }
   }
  if(flag==0) getchar();
   }
    char K;
   	while(cin>>K){
   		if(K=='A'){		
   			swap(s[kx-1][ky],s[kx][ky]);
   			kx--;
   			if(kx<1) flagg=0; 
		   }
		else if(K=='B'){
			swap(s[kx+1][ky],s[kx][ky]);
			kx++;
			if(kx>5) flagg=0;
		}else if(K=='L'){
			swap(s[kx][ky-1],s[kx][ky]);
   			ky--;
   			if(ky<1) flagg=0;
		}else if(K=='R'){
			swap(s[kx][ky+1],s[kx][ky]);
   			ky++;
   			if(ky>5) flagg=0;
		}else if(K=='0'){
			cout<<"Puzzle #"<<cnt++<<":"<<endl;
			if(flagg==1){
			for(int i=1;i<=5;i++){
   			for(int j=1;j<=5;j++){
   			cout<<s[i][j]<<" ";}
			cout<<endl;}
			cout<<endl;
			getchar();
			goto first;
			}else{
				cout<<"This puzzle has no final configuration."<<endl;
				getchar();
				cout<<endl;
			goto first;
			}
		}
	   }
   }
   return 0;
}


2021/10/2 14:51
加载中...