Pagini recente »
Cod sursă (job #293092)
Cod sursă (job
#293092)
#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;
}