Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- using namespace std;
- ifstream fin("traseucal.in");
- ofstream fout("traseucal.out");
- struct ceva{int l,c,d;}s[105];
- int a[15][15],n,m,b[15][15],nsol;
- int dl[]={-1,-2,-2,-1,1,2,2,1};
- int dc[]={-2,-1,1,2,2,1,-1,-2};
- int corect(int k);
- void afisare(int k);
- void bkt(int k);
- int main()
- { int i,j;
- fin>>n>>m;
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- fin>>a[i][j];
- s[1].l=s[1].c=1; s[1].d=-1;
- bkt(2);
- if(nsol==0)
- {
- for(i=1;i<=n;i++)
- {for(j=1;j<=m;j++)fout<<b[i][j]<<" ";
- fout<<endl;}
- }
- return 0;
- }
- void bkt(int k)
- {
- int i;
- for(i=0;i<8;i++)
- {
- s[k].d=i;
- s[k].l=s[k-1].l+dl[i];
- s[k].c=s[k-1].c+dc[i];
- if(corect(k))
- {
- if(s[k].l==n&&s[k].c==m)afisare(k);
- else bkt(k+1);
- }
- }
- }
- int corect(int k)
- {
- int i;
- if(nsol>0) return 0;
- if(s[k].l<1||s[k].l>n) return 0;
- if(s[k].c<1||s[k].c>m) return 0;
- if(a[s[k].l][s[k].c]==1) return 0;
- for(i=1;i<k;i++)
- if(s[i].l==s[k].l&&s[i].c==s[k].c) return 0;
- return 1;
- }
- void afisare(int k)
- { int i,j;
- nsol++;
- for(i=1;i<=k;i++) b[s[i].l][s[i].c]=i;
- for(i=1;i<=n;i++)
- {for(j=1;j<=m;j++)fout<<b[i][j]<<" ";
- fout<<endl;}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement