Pagini recente »
Cod sursă (job #293447)
|
Clasament ks_solve
|
Diferențe pentru runda/oji-2023-antrenament-ffa între reviziile 52 și 25
|
Istoria paginii utilizator/nituaugustus
|
Cod sursă (job #800844)
Cod sursă (job
#800844)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("immortal.in");
ofstream fout("immortal.out");
bool found=false;
void back(vector<vector<int>> a, vector<vector<int>> raspuns, int I, int n, int m, int k)
{
if(found) return;
if(I==1)
{
found=true;
//afisare(raspuns):
for(int i=0; i<raspuns.size()-1; i++)
{
for(int j=0; j<raspuns[1].size(); j++)
fout<<raspuns[i][j]<<" ";
fout<<"\n";
}
return;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
//sus
if(i-2>0 && a[i-2][j]==0 && a[i-1][j]==1 && a[i][j]==1)
{
a[i][j]=0;
a[i-1][j]=0;
a[i-2][j]=1;
raspuns[k][0]=i;
raspuns[k][1]=j;
raspuns[k][2]=i-2;
raspuns[k][3]=j;
back(a, raspuns, I-1, n, m, k+1);
raspuns[k][0]=0; //de aici
raspuns[k][1]=0;
raspuns[k][2]=0;
raspuns[k][3]=0;
a[i][j]=1;
a[i-1][j]=1;
a[i-2][j]=0; //pana aici e backtracking-ul
}
//stanga
if(j-2>0 && a[i][j-2]==0 && a[i][j-1]==1 && a[i][j]==1)
{
a[i][j]=0;
a[i][j-1]=0;
a[i][j-2]=1;
raspuns[k][0]=i;
raspuns[k][1]=j;
raspuns[k][2]=i;
raspuns[k][3]=j-2;
back(a, raspuns, I-1, n, m, k+1);
raspuns[k][0]=0; //de aici
raspuns[k][1]=0;
raspuns[k][2]=0;
raspuns[k][3]=0;
a[i][j]=1;
a[i][j-1]=1;
a[i][j-2]=0; //pana aici e backtracking-ul
}
//dreapta
if(j+2<=n && a[i][j+2]==0 && a[i][j+1]==1 && a[i][j]==1)
{
a[i][j]=0;
a[i][j+1]=0;
a[i][j+2]=1;
raspuns[k][0]=i;
raspuns[k][1]=j;
raspuns[k][2]=i;
raspuns[k][3]=j+2;
back(a, raspuns, I-1, n, m, k+1);
raspuns[k][0]=0; //de aici
raspuns[k][1]=0;
raspuns[k][2]=0;
raspuns[k][3]=0;
a[i][j]=1;
a[i][j+1]=1;
a[i][j+2]=0; //pana aici e backtracking-ul
}
}
}
}
int main() {
int n,m,I;
fin>>n>>m>>I;
vector<vector<int>> a(n+1, vector<int>(m+1, 0)), raspuns(I, vector<int>(4, 0));
for (int i=1; i<=I; i++) {
int a1, a2;
fin>>a1>>a2;
a[a1][a2]=1;
}
back(a, raspuns, I, n, m, 0);
return 0;
}