1 solutions

  • 0
    @ 2025-3-3 16:21:26

    C++ :

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int fx[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
    char a[30][30];
    int d[30][30];
    int n,m,s1,s2,e1,e2;
    
    void dfs(int x,int y,int dep){
    	d[x][y] = dep;
    	int tx,ty;
    	for(int i = 0;i < 4;i++){
    		tx = x + fx[i][0];
    		ty = y + fx[i][1];
    		
    		if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]!='#'){
    			if(a[tx][ty]=='x' && dep+2<d[tx][ty]) dfs(tx,ty,dep+2);
    			else if(a[tx][ty]!='x' && dep+1<d[tx][ty]) dfs(tx,ty,dep+1);
    		}
    	} 
    }
    
    int main(){
    	cin>>n>>m;
    	for(int i = 1;i <= n;i++){
    		for(int j = 1;j <= m;j++){
    			cin>>a[i][j];
    			d[i][j] = INT_MAX;
    			if(a[i][j]=='a'){
    				e1 = i;
    				e2 = j;
    			}else if(a[i][j] == 'r'){
    				s1 = i;
    				s2 = j;
    			}
    		} 
    	}
    	
    	dfs(s1,s2,0);
    	
    
    	if(d[e1][e2] == INT_MAX) cout<<"Impossible";
    	else cout<<d[e1][e2];
    	return 0;
    }
    
    
    
    • 1

    Information

    ID
    9943
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By