View Code of Problem 1083

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
using namespace std;
void display(const vector<string> & puzzle)
{
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
		{
			if(j != 4)cout<<puzzle[i][j]<<" ";
			else cout<<puzzle[i][j]<<endl;
		}
	}
}
inline void swap(vector<string> & puzzle,int x1,int y1,int x2,int y2)
{
	char t = puzzle[x1][y1];puzzle[x1][y1]=puzzle[x2][y2];
	puzzle[x2][y2]=t;
}
bool move(vector<string> & puzzle,const string & directions,int x,int y)
{
	for(int i=0;i<directions.size()-1;i++)
	{
		char m = directions[i];
		int nx,ny;
		if(m=='A'){
			if(x==0)return false;
			nx=x-1;ny=y;
		}
		else if(m == 'B'){
			if(x==4)return false;
			nx=x+1;ny=y;
		}
		else if(m == 'L'){
			if(y==0)return false;
			nx=x;ny=y-1;
		}
		else if(m == 'R'){
			if(y==4)return false;
			nx=x;ny=y+1;
		}
		swap(puzzle,x,y,nx,ny);
		x=nx;y=ny;
	}
	return true;
}
int main()
{
	string input;
	vector<string> vec(5);
	int cnt = 0,x,y;
	bool first = true;
	getline(cin,input);
	while(!(input.size()==1 && input[0] == 'Z'))
	{
		if(first == true)first = false;
		else printf("\n");
		cnt++;
		//cout<<input.size()<<endl;
		vec[0]=input;
		for(int i=1;i<5;i++){getline(cin,input);vec[i]=input;}
		for(int i =0;i<5;i++)
			for(int j=0;j<5;j++){
				if(vec[i][j] == ' '){
					x=i;y=j;
					break;
				}
			}
		string directions;
		do{getline(cin,input);directions+=input;}while(input[input.size()-1]!='0');
		//
		// display(vec);
		//cout<<directions<<endl;
		//cout<<x<<" "<<y<<endl;
		//
		if(move(vec,directions,x,y) == true){
			printf("Puzzle #%d:\n",cnt);
			display(vec);
		}else{
			printf("Puzzle #%d:\nThis puzzle has no final configuration.\n",cnt);
		}
		getline(cin,input);
	}
}

Double click to view unformatted code.


Back to problem 1083