Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <queue>
- #define MAX 21
- using namespace std;
- ifstream fin("bile.in");
- ofstream fout("bile.out");
- int di[4]= {-1,0,1,0};
- int dj[4]= {0,1,0,-1};
- int a[MAX][MAX],n,m,drumuri=0,nexti,nextj,l=0;
- pair<int,int>d[MAX*MAX];
- queue<pair<int, int> > q;
- bool posibil(int i, int j);
- void backtr(int i, int j, int pas);
- int main()
- {
- int starti, startj;
- fin>>n>>m;
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- {
- fin>>a[i][j];
- }
- }
- fin>>starti>>startj;
- for(int j=1; j<=m; j++)
- {
- q.push({1,j});
- }
- for(int i=1; i<=n; i++)
- {
- q.push({i,1});
- }
- for(int i=n; i>=1; i--)
- {
- q.push({i,n});
- }
- for(int j=m; j>=1; j--)
- {
- q.push({j,m});
- }
- backtr(starti,startj,1);
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- {
- fout<<a[i][j]<<" ";
- }
- fout<<endl;
- }
- cout<<drumuri;
- fin.close();
- fout.close();
- return 0;
- }
- bool posibil(int i, int j)
- {
- return i>0 && i<=n && j>0 && j<=m;
- }
- void backtr(int i, int j, int pas)
- {
- a[i][j]=pas;
- d[pas]= {i,j};
- while(!q.empty())
- {
- int stopi=q.front().first;
- int stopj=q.front().second;
- if(i==stopi && j==stopj)
- {
- drumuri+=1;
- for(int k=0; k<=pas; k++)
- {
- cout<<d[k].first<<" "<<d[k].second<<endl;
- }
- }
- else
- {
- for(int k=0; k<4; k++)
- {
- int nexti=i+di[k];
- int nextj=j+dj[k];
- if(posibil(nexti,nextj) && a[nexti][nextj]<a[i][j])
- {
- backtr(nexti, nextj, pas+1);
- }
- }
- }
- q.pop();
- }
- a[i][j]=pas;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement