Se oferă un lac de mxn "bălţi" care posedă sau nu obiecte plutitoare
care pot susţine o broască de masă m'. Broasca este paraşutată pe un
astfel de obiect plutitor căruia îi vom atribui în continuare denumirea
de "nufăr". Se citeşte dintr-un fişier cu denumire fortuită m, n, poziţia
iniţială a amfibianului, un număr întreg mm şi mm perechi de coordonate pe
care se găsesc nuferi. Să se genereze într-o ordine fortuită toate
traseele pe care le poate parcurge amfibianul pentru a ajunge la malul
lacului.
#include <stdio.h>Fisier
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int L[10][10],sol[10][10],n,m,mm,nrsol,is,js;
int dx[]= {-1,1,0,0},dy[]= {0,0,-1,1};
void citire(FILE *f)
{
int a,b,i;
fscanf(f,"%d %d %d %d %d",&m,&n,&is,&js,&mm);
sol[is][js]=1;
for(i=1; i<=mm; i++)
{
fscanf(f,"%d%d",&a,&b);
L[a][b]=1;
}
}
void afisare()
{
int i,j;
nrsol++;
printf("Solutia nr %d\n",nrsol);
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
printf("%d ",sol[i][j]);
printf("\n");
}
printf("\n");
}
void traseu(int i, int j, int pas)
{
int inou,jnou,k;
for(k=0; k<4; k++)
{
inou=i+dx[k];
jnou=j+dy[k];
if(inou>=1 && inou<=m && jnou>=1 && jnou<=n)
if(sol[inou][jnou]==0 && L[inou][jnou]==1)
{
sol[inou][jnou]=pas;
if(inou==1 || inou==m || jnou==1 || jnou==n)
afisare();
traseu(inou,jnou,pas+1);
sol[inou][jnou]=0;
}
}
}
int main()
{
FILE *f;
f=fopen("date.txt","r");
citire(f);
//printf("%d %d",m,n);
traseu(is,js,2);
printf("%d solutii",nrsol);
printf("\nApasati o tasta pentru iesire");
getch();
}
7 7
4 3
11
4 2
1 2
1 4
4 5
4 4
3 4
3 5
4 1
5 2
4 7
4 6