Filehost.ro - gazduire fisiere
Recreere
Simplu si usor
Nou pe simpatie:
Nicole23
Femeie
25 ani
Bucuresti
cauta Barbat
28 - 65 ani
RecreereReguliInregistrareLoginPozeNu sunteti logat. Lista Forumurilor Pe Tematici
Recreere / Programe Pc & Programare /

Algoritmul lui Lee

Pagini: 1 Moderat de Gabitu, luis1ca
#1
Gabitu
Moderator
Postari: 9
Se consideră o matrice pătratică de ordinul "n" īn care avem o singura valoare nulă la o poziție cunoscută, mai multe valori -1 cu rol de valoare inaccesibilă și o valoare foarte mare īn restul locațiilor. Scopul este de a găsi cel mai mic drum de la valoarea 0 către o altă locație de asemenea cunoscută, diferită de locațiile inaccesibile. Algoritmul lui Lee marchează īn matrice pasul 1 peste tot īn jurul valorii 0 daca rămānem īn matrice și dacă nu se īntālnesc puncte inaccesibile. Se marchează cu pasul 2 īn jurul tuturor valorilor 1 in aceleași condiții ca īn pasul anterior. Aflāndu-ne la un pas oarecare k analizăm toți cei 4 vecini ai unei locații curente si marcăm cu pasul k+1, daca valoarea existentă īntr-un anumit vecin este : diferită de -1, rămāne īn matrice, memorează o valoare mai mare decat k+1, adică se optimizează traseul de la locația cu 0 către respectivul vecin.

#include<fstream>
#include<iostream>
#include<iomanip>
#define N 100
using namespace std;
void Lee(int a[][N],int m, int n, int l, int c, int pas)
{
    if (l>1 && a[l-1][c]>pas+1)
    {
        a[l-1][c]=pas+1;
        Lee(a,m,n,l-1,c,pas+1);
    }
    if (c<n && a[l][c+1]>pas+1)
    {
        a[l][c+1]=pas+1;
        Lee(a,m,n,l,c+1,pas+1);
    }
    if (l<m && a[l+1][c]>pas+1)
    {
        a[l+1][c]=pas+1;
        Lee(a,m,n,l+1,c,pas+1);
    }
    if (c>0 && a[l][c-1]>pas+1)
    {
        a[l][c-1]=pas+1;
        Lee(a,m,n,l,c-1,pas+1);
    }
}
void tipar (int a[][N], int m, int n)
{
    int i,j;
    for (i=1; i<=m; i++)
    {
        for (j=1; j<=n; j++)
            cout<<setw(5)<<a[i][j];
        cout<<endl;
    }
}
int main ()
{
    int a[N][N],l,c,lf,cf,m,n,i,j;
    fstream f("Lee.txt",ios::in);
    f>>m>>n;
    for (i=1; i<=m; i++)
        for (j=1; j<=n; j++)
        {
            f>>a[i][j];
            if (a[i][j]==0)
            {
                l=i;
                c=j;
            }
        }
    cout<<"Dati lf si cf ";cin>>lf>>cf;
    if (a[lf][cf]==-1)
        return 0;
    Lee(a,m,n,l,c,0);
    if (a[lf][cf]==100)
        cout<<"Locatie inaccesibila";
    else
        tipar(a,m,n);
}


Algoritmul prezentat folosește ca metodă principală recursivitatea.


_______________________________________
Ceva inteligent...

 
   
Pagini: 1  
Mergi la