Documente Academic
Documente Profesional
Documente Cultură
by Radu Berinde
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char Type[52][52];
short Val[52][52];
int N, M;
int L1, C1, L2, C2;
int Nr;
edge * V[52*52*2];
short tata[52*52*2];
edge * tedge[52*52*2];
short coada[52*52*2];
int cl, cr;
int Flow;
int bf()
{
edge *e;
int i;
coada[0] = 1;
memset(tata, 0, sizeof(tata));
for (i = 2; i != 1; i = tata[i])
tedge[i]->f++, tedge[i]->rev->f--;
return 1;
}
void solve()
{
while (bf())
Flow++;
}
void print()
{
int i, j;
FILE *fo = fopen("magic.out", "wt");
fprintf(fo, "%d\n", Flow);
for (i = 1; i <= N; i++)
for (j = 1; j <= M; j++)
if (Type[i][j] == 2 && tata[Val[i][j]] && !tata[Val[i][j]+1])
fprintf(fo, "%d %d\n", i, j);
fclose(fo);
}
void create_graph()
{
int i, j, v;
Val[L1][C1] = 1;
Val[L2][C2] = 2;
Nr = 2;
void read_data()
{
int i, j;
char c;
FILE *fi = fopen("magic.in", "rt");
fscanf(fi, "%d %d", &N, &M);
for (i = 1; i <= N; i++)
for (j = 1; j <= M; j++)
{
fscanf(fi, " %c", &c);
Type[i][j] = (c != 'x' && c != 'X') + (c == '*');
if (c == 'M') L1 = i, C1 = j, Type[i][j] = -1;
if (c == 'T') L2 = i, C2 = j, Type[i][j] = -2;
}
fclose(fi);
}
int main()
{
read_data();
create_graph();
solve();
print();
return 0;
}