【 UVA - 227 】Puzzle(谜题)

题目链接

代码:

#include 
#include 
using namespace std;
int main()
{
	int cs=0,cnt=0; 
	string s;
	while(getline(cin,s) && s!="Z")
	{
		if(cnt) cout<<endl; //格式
		cnt=1;
		
		int x,y;  //空格所在位置
		char site[5][5]; //地图
		for(int i=0;i<s.length();i++) //第 1行 
		{
			site[0][i]=s[i]; 
			if(site[0][i]==' ') x=0,y=i;
		}
			
		for(int i=1;i<=4;i++) //2-5 行 
		{
			getline(cin,s);
			for(int j=0;j<s.length();j++)
			{
				site[i][j]=s[j];
				if(site[i][j]==' ') x=i,y=j;
			}	
		}
		
		int flag=0; //标记是否出界
		while(1) //指令字符可能不止一行
		{
			getline(cin,s);
			for(int i=0;i<s.length();i++)
			{			
				if(s[i]=='A') 
				{
					if(x-1<0)  //越界
					{
						flag=1;
						break;
					}
					swap(site[x][y],site[x-1][y]); //交换位置
					x--; //空格位置改变
				}
				if(s[i]=='B')
				{
					if(x+1>4)
					{
						flag=1;
						break;
					}
					swap(site[x][y],site[x+1][y]); 
					x++;
				}
				if(s[i]=='L')
				{
					if(y-1<0)
					{
						flag=1;
						break;
					}
					swap(site[x][y],site[x][y-1]);
					y--;
				}
				if(s[i]=='R')
				{
					if(y+1>4)
					{
						flag=1;
						break;
					}
					swap(site[x][y],site[x][y+1]);
					y++;
				}
			}
			if(s[s.size()-1]=='0') break; //该行最后一个为0,表示指令结束
		}
		
		printf("Puzzle #%d:\n",++cs);
		if(flag) printf("This puzzle has no final configuration.\n");
		else
		{
			for(int i=0;i<5;i++)
			{
				for(int j=0;j<5;j++)
				{
					cout<<site[i][j];
					if(j<4) cout<<" ";
				}
				cout<<endl;   
			}
		}
	}
   return 0;
}

你可能感兴趣的:(POJ,+,HDU,+,UVA,字符串,C++,UVA)