Orar semigroup #2

Orar semigroup #2

Archive for ianuarie 2014

Problema broaştei pentru C

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>
#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();
}
Fisier
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

joi, 9 ianuarie 2014 by DlMuresan
Categories: | Leave a comment