1 条题解

  • 0
    @ 2023-6-11 12:17:09

    C :

    #include<stdio.h>
    const int x0[]={0,1,0,-1},y0[]={1,0,-1,0};
    int n,m,cnt,x[10000],y[10000],t[10000];
    char c[110][110];
    int	b[110][110];
    int main()
    {
    	scanf("%d %d",&n,&m);
    	for(int i=1;i<=n;i++)
    	scanf("%s",c[i]);
    	int head=0,tail=1;
    	x[1]=t[1]=1;y[1]=0;
    	b[1][0]=1;
    	while(head!=tail)
    	{
    	head++;
    	for(int i=0;i<4;i++)
    	{
    		int x1=x[head]+x0[i],y1=y[head]+y0[i];
    		if(x1>0&&x1<=n&&y1>=0&&y1<m&&c[x1][y1]=='.'&&!b[x1][y1])
    		{
    			tail++;b[x1][y1]=1;
    			x[tail]=x1;y[tail]=y1;t[tail]=t[head]+1;
    			if(x1==n&&y1==m-1)
    			{
    				printf("%d",t[tail]);
    				return 0;
    			}
    		}
    	}
    	}
    } 
    

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
     
    char a[150][150];
    //存储到达每个点最少需要多少步
    int d[150][150]; 
    int m,n;
    
    //递归求步数 
    void fun(int dep,int i,int j){
    	if(dep < d[i][j]){
    		d[i][j] = dep;
    		if(a[i-1][j] == '.') fun(dep+1,i-1,j); 
    		if(a[i+1][j] == '.') fun(dep+1,i+1,j);
    		if(a[i][j-1] == '.') fun(dep+1,i,j-1);
    		if(a[i][j+1] == '.') fun(dep+1,i,j+1);
    	} 
    }
     
    int main(){
        int i,j;
        cin>>n>>m;
    	 
        //.表示能走,#表示不能走 
        for(i = 1;i <= n;i++){
            for(j = 1;j <= m;j++){
                cin>>a[i][j];
                d[i][j] = INT_MAX;
            }
        }
        
        fun(1,1,1);
        cout<<d[n][m]<<endl; 
        
    }
    
    
    • 1

    信息

    ID
    2352
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    13
    已通过
    0
    上传者