3 solutions

  • 1
    @ 2022-6-18 14:07:16

    带记录方向的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