Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
#include <stdio.h>
#define EMPTY 0
#define ZOMBIE 1
#define WALL 2
int x, y;
char map[101][101];
unsigned short route[101][101];
void fill(int j, int i, int r)
{
if (j < 0 || j >= y || i < 0 || i >= x)
return;
switch (map[j][i]) {
case EMPTY:
r += 1;
break;
case ZOMBIE:
r += 2;
break;
case WALL:
return;
}
if (route[j][i] <= r)
return;
route[j][i] = r;
fill(j - 1, i, r);
fill(j + 1, i, r);
fill(j, i - 1, r);
fill(j, i + 1, r);
}
void routing()
{
int i, j;
for (j = 0; j < y; j++)
for (i = 0; i < x; i++)
route[j][i] = 0xFFFF;
fill(0, 0, 0);
}
void dump()
{
int i, j;
for (j = 0; j < y; j++) {
for (i = 0; i < x; i++)
switch (map[j][i]) {
case EMPTY:
printf(" %05d ", route[j][i]);
break;
case ZOMBIE:
printf("Z%05dZ", route[j][i]);
break;
case WALL:
printf("#######");
break;
}
printf("\n");
}
}
void getnewline()
{
int ch;
while (1) {
ch = getchar();
if (!(ch == '\r' || ch == '\n')) {
ungetc(ch, stdin);
return;
}
}
}
void min(unsigned short *min, int *nj, int *ni, int j, int i)
{
if (j < 0 || j >= y || i < 0 || i >= x)
return;
if (*min > route[j][i]) {
*min = route[j][i];
*nj = j;
*ni = i;
}
}
void _hop(int j, int i)
{
unsigned short m = 0xFFFF;
int nj, ni;
min(&m, &nj, &ni, j - 1, i);
min(&m, &nj, &ni, j + 1, i);
min(&m, &nj, &ni, j, i - 1);
min(&m, &nj, &ni, j, i + 1);
if (m >= route[j][i])
return;
_hop(nj, ni);
printf("%d %d\n", j + 1, i + 1);
}
void hop()
{
if (route[y - 1][x - 1] == 0xFFFF) {
printf("Nem lehet eljutni\n");
return;
}
printf("%d\n", route[y - 1][x - 1]);
printf("1 1\n");
_hop(y - 1, x - 1);
}
int main()
{
int i, j;
int ch;
if (scanf("%d %d", &y, &x) != 2) {
printf("Keves parameter\n");
return 1;
}
getnewline();
for (j = 0; j < y; j++) {
for (i = 0; i < x; i++) {
ch = getchar();
switch (ch) {
case ' ':
case '_':
map[j][i] = EMPTY;
break;
case 'z':
case 'Z':
map[j][i] = ZOMBIE;
break;
case '#':
map[j][i] = WALL;
break;
case EOF:
printf("Keves karakter\n");
return 0;
default:
printf("Ismeretlen karakter\n");
return 0;
}
}
getnewline();
}
routing();
hop();
return 1;
}