Cod sursă (job #293092)

Utilizator avatar micutu Andrei Vasile Cont Fraudulent micutu IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 2,30 kb
Rundă Arhiva de probleme Status evaluat
Dată 13 mar. 2017 10:54:22 Scor 0
#include <fstream.h>
#include <iostream.h>
ifstream fin("immortal.in");
ofstream fout("immortal.out");

int immortals[25][25], n, m, I, fights[25][5], found;

void gen(int k)
{
	int i, j;

	if(!found)
	{
	if (k==I)
	{
		for(i=1;i<=I-1;i++)
			fout<<fights[i][1]<<" "<<fights[i][2]<<" "<<fights[i][3]<<" "<<fights[i][4]<<"\n";
		found=1;
	}
	else
	{
		
		//if (k>13) {cout<<k<<"\n";cin.get();}
		for (i=1;i<=n;i++)
			for(j=1;j<=m;j++)
				if(immortals[i][j]==1)
				{
					//try to move up
					if (immortals[i-1][j]==1 && immortals[i-2][j]==0)
					{
						immortals[i-2][j]=1;
						immortals[i-1][j]=0;
						immortals[i][j]=0;
						fights[k][1]=i;
						fights[k][2]=j;
						fights[k][3]=i-2;
						fights[k][4]=j;
						gen(k+1);
						immortals[i-2][j]=0;
						immortals[i-1][j]=1;
						immortals[i][j]=1;
					}
					
					//try to move right
					if (immortals[i][j+1]==1 && immortals[i][j+2]==0)
					{
						immortals[i][j+2]=1;
						immortals[i][j+1]=0;
						immortals[i][j]=0;
						fights[k][1]=i;
						fights[k][2]=j;
						fights[k][3]=i;
						fights[k][4]=j+2;
						gen(k+1);
						immortals[i][j+2]=0;
						immortals[i][j+1]=1;
						immortals[i][j]=1;
					}
					
					//try to move down
					if (immortals[i+1][j]==1 && immortals[i+2][j]==0)
					{
						immortals[i+2][j]=1;
						immortals[i+1][j]=0;
						immortals[i][j]=0;
						fights[k][1]=i;
						fights[k][2]=j;
						fights[k][3]=i+2;
						fights[k][4]=j;
						gen(k+1);
						immortals[i+2][j]=0;
						immortals[i+1][j]=1;
						immortals[i][j]=1;
					}
					
					//try to move left
					if (immortals[i][j-1]==1 && immortals[i][j-2]==0)
					{
						immortals[i][j-2]=1;
						immortals[i][j-1]=0;
						immortals[i][j]=0;
						fights[k][1]=i;
						fights[k][2]=j;
						fights[k][3]=i;
						fights[k][4]=j-2;
						gen(k+1);
						immortals[i][j-2]=0;
						immortals[i][j-1]=1;
						immortals[i][j]=1;
					}
				}
	}
	}
}


int main()
{
	int i, a, b;
	
	fin>>n>>m>>I;
	
	for(i=1;i<=I;i++)
	{
		fin>>a>>b;
		immortals[a][b]=1;
	}
	
	for(i=1;i<=n;i++)
		immortals[i][0]=immortals[i][m+1]=-1;
	for(i=1;i<=m;i++)
		immortals[0][i]=immortals[n+1][i]=-1;
	
	gen(1);
	/*fights[1][1]=3;
	fights[1][2]=3;
	
	fout<<fights[1][2];*/
	
	return 0;
}