Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int dx[] = {+1,-1, 0, 0};
- int dy[] = { 0, 0,+1,-1};
- int modul(int x)
- {
- if(x<0) return -1*x;
- return x;
- }
- bool InMat(int x, int y, int n, int m)
- {
- if(x<1 || y<1 || x>n || y>m)
- return false;
- return true;
- /**
- !(a && b) == !a || !b
- !(a || b) == !a && !b
- Legile lui De Morgan
- */
- }
- int PunctulB(int n, int m,int A[100][100], int L, int C)
- {
- int nrap[n+1][m+1];
- int x, y;
- x = L; y = C;
- for(int i=1;i<=n;++i)
- for(int j=1;j<=m;++j)
- nrap[i][j] = 0;
- int minim = 2000000000;
- while(1)
- {
- cout<<"x="<<x<<"\n";
- cout<<"y="<<y<<"\n";
- cout<<"\ta[x][y]="<<A[x][y]<<"\n\n";
- nrap[x][y]++;
- if(nrap[x][y] == 2)
- if(A[x][y] < minim)
- minim = A[x][y];
- if(nrap[x][y] == 3)//deja ne repetam prea mult
- return minim;
- //sunttem la coordonatele (x,y)
- int next_x, next_y;
- int x2, y2;
- int dif_min = 2000000000;
- for(int k=0;k<4;++k)
- {
- x2 = x + dx[k];
- y2 = y + dy[k];
- if(InMat(x2,y2,n,m))
- {
- if(modul(A[x2][y2]-A[x][y]) < dif_min)
- {
- dif_min = modul(A[x2][y2]-A[x][y]);
- next_x = x2;
- next_y = y2;
- }
- else
- if(modul(A[x2][y2]-A[x][y]) == dif_min && A[x2][y2]<A[next_x][next_y])
- {
- dif_min = modul(A[x2][y2]-A[x][y]);
- next_x = x2;
- next_y = y2;
- }
- }
- }
- x = next_x;
- y = next_y;
- }
- }
- int main()
- {
- int a[100][100],n,m,L,C;
- cout<<"n="; cin>>n;
- cout<<"m="; cin>>m;
- for(int i=1;i<=n;++i)
- for(int j=1;j<=m;++j)
- cin>>a[i][j];
- for(int i=1;i<=n;++i)
- {
- for(int j=1;j<=m;++j)
- cout<<a[i][j]<<" ";
- cout<<"\n";
- }
- cout<<"L="; cin>>L;
- cout<<"C="; cin>>C;
- cout<<"sol="<<PunctulB(n,m,a,L,C);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement