3 solutions
-
1
带记录方向的DFS
#include<bits/stdc++.h> using namespace std; #define ioio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define endl "\n" #define debug(x) cout<<#x<<":"<<x<<endl; #define L(k) k<<1 #define R(k) k<<1|1 #define P pair #define P1 first #define P2 second #define u_map unordered_map #define p_queue priority_queue typedef long long ll; const double eps = 1e-6; const int mod = 1e9 + 7; const int INF = 0x3f3f3f3f; const int INF2 = (1 << 31); const int N = 2e2 + 7; int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1}; /*-------------------------------------------------*/ int n,m; int ma[N][N]; bool vis[N][N]; vector<int>v; void dfs(int x,int y,int pre){ v.push_back(ma[x][y]); vis[x][y]=1; for(int i=pre,flag=0;i<=4;i++){ if(flag==1&&i==4)break; else if(i==4){ i=0; flag=1; } int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&vis[xx][yy]==0){ dfs(xx,yy,i); break; } } } void slove() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>ma[i][j]; dfs(1,1,0); for(int x:v) cout<<x<<" "; } int main() { ioio int t=1; //freopen("./test.txt","r",stdin); //cin>>t; while(t--) slove(); return 0; }
Information
- ID
- 1176
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 8
- Tags
- # Submissions
- 39
- Accepted
- 8
- Uploaded By