Cod sursă (job #643776)

Utilizator avatar MAlex2019 Melintioi George Alexandru MAlex2019 IP ascuns
Problemă Immortal (clasele 9-10) Compilator c-32 | 1.92 kb
Rundă Arhiva de probleme Status evaluat
Dată 25 mar. 2022 18:37:51 Scor 10
#pragma warning(disable: 4996)

#include <stdio.h>

int n, m;
char arene[14][22][22];
int mutari[14][4], dim;
int diri[4] = { -1, 0, 1, 0 };
int dirj[4] = { 0, 1, 0, -1 };

void copyStage(int pas) {
	int i, j;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++)
			arene[pas + 1][i][j] = arene[pas][i][j];
}

void printStage(int pas) {
	int i, j;
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= m; j++)
			printf("%d ", arene[pas][i][j]);
		printf("\n");
	}
}

int getSolution(int pas) {
	int i, j, dir, lin, col, lin2, col2, cnt = 0, cntmut = 0, ok;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++) 
			if (arene[pas][i][j]) {
				cnt++;
				for (dir = 0; dir < 4; dir++) {
					lin = i + diri[dir];
					col = j + dirj[dir];
					lin2 = lin + diri[dir];
					col2 = col + dirj[dir];
					if (arene[pas][lin][col] == 1 && arene[pas][lin2][col2] == 0) {
						cntmut++;
						copyStage(pas);
						arene[pas + 1][lin2][col2] = 1;
						arene[pas + 1][lin][col] = arene[pas + 1][i][j] = 0;
						ok = getSolution(pas + 1);
						if (ok) {
							mutari[pas][0] = i;
							mutari[pas][1] = j;
							mutari[pas][2] = lin2;
							mutari[pas][3] = col2;
							dim++;
							dir = 4;
							i = n;
							j = m;
						}
					}
				}
			}
	return !(cnt > 1 && cntmut == 0);
}

int main() {
	FILE* fin, * fout;
	int k, i, j, x, y;

	fin = fopen("immortal.in", "r");
	fscanf(fin, "%d%d%d", &n, &m, &k);
	for (i = 0; i < k; i++) {
		fscanf(fin, "%d%d", &x, &y);
		arene[0][x][y] = 1;
	}
	fclose(fin);

	for (i = 0; i < 14; i++) {
		for (x = 0; x < n + 2; x++)
			arene[i][x][0] = arene[i][x][m + 1] = -1;
		for (y = 0; y < m + 2; y++)
			arene[i][0][y] = arene[i][n + 1][y] = -1;
	}
	getSolution(0);

	fout = fopen("immortal.out", "w");
	for (i = 0; i < dim; i++) {
		for (j = 0; j < 4; j++)
			fprintf(fout, "%d ", mutari[i][j]);
		fputc('\n', fout);
	}
	fclose(fout);

	return 0;
}