|
8#
楼主 |
发表于 2020-4-26 13:30:31
|
只看该作者
完整程序:
- #include <bits/stdc++.h>
- using namespace std;
- int dx[]= {0,+1,+2,+2,+1,-1,-2,-2,-1};
- int dy[]= {0,+2,+1,-1,-2,+2,+1,-1,-2};
- const int mn=10;
- int x[mn],y[mn],m[mn][mn];
- int n;
- bool can(int x,int y) ///xy点是否能到达
- {
- if (x<1 || x>n || y<1 || y>n) return 0;///越界
- if (m[x][y]>0) return 0;/// 已经被用
- return 1;
- }
- void pr()
- {
- for (int y=n; y>=1; y--)
- {
- for (int x=1; x<=n; x++) cout<<setw(3)<<m[y][x];
- cout<<endl;
- }
- }
- void dfs(int i)
- {
- if (i>n*n) pr();
- else for(int k=1; k<=8; k++)
- {
- ///预判下一个点
- int tx=x[i-1]+dx[k];
- int ty=y[i-1]+dy[k];
- if (can(tx,ty))
- {
- x[i]=tx,y[i]=ty;
- m[tx][ty]=i;
- dfs(i+1);
- m[tx][ty]=0;
- }
- }
- }
- int main()
- {
- n=5;
- ///标志数组清0
- for (int x=1; x<=5; x++)
- for (int y=1; y<=5; y++) a[x][y]=0;
- x[1]=y[1]=1;/// 1,1处起步
- m[1][1]=1; ///第一个标记
- dfs(2);
- return 0;
- }
复制代码 |
|