Java实现 蓝桥杯 算法提高 最大值路径

试题 算法提高 最大值路径

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  刷微博,编程序。如下图所示,@北京发布 提出了如下“头脑震荡”问题。对此问题做一般化描述:
  有n阶方阵,从矩阵的左下角元素为起点,从行或列(水平或垂直)两个方向上移动,直到右上角。求出有多少条路径可以使得经过的元素累加值最大,最大值是多少。
在这里插入图片描述
输入格式
  共有n+1行。
  第一行整数n,表示矩阵的阶数,2<=n<=10。
  第二行起,每行n个整数,以空格分隔,共n行。。
输出格式
  一行,两个空格分隔的数,第一个表示最大值路径的条数,第二个表示最大值。
样例输入
5
4 5 4 5 6
2 6 5 4 6
2 6 6 5 2
4 5 2 2 5
5 2 5 6 4
样例输出
3 47

 

import java.util.Scanner;

public class 最大值路径 {
   static int m;
   //看看这条路走过没有
   static boolean [] [] visit ;
   //放地图
   static int [] []a;
   //值相同的路数     值
   static int k=0,f=0;
   //四个方向
   static int p[][]={{-1,0},{1,0},{0,-1},{0,1} };
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();
        a= new int[m][m];
        for (int i=0;i<m;i++){
            for (int j=0;j<m;j++){
                a[i][j]=sc.nextInt();
            }
        }
        visit = new boolean[m][m];
        dfs(a,m-1,0,1,a[m-1][0]);
        System.out.println(k+" "+f);
    }
                        //  地图     x坐标  y坐标  想用路径的有多少条路     最大值元素累加
    public static void dfs(int a[][],int i,int j,int route,int sum){
        if(route>2*m-1)
            return ;
        if(visit[i][j]==true)
            return ;
        if(i==0&&j==m-1)
            if(route!=2*m-1)
                return ;
        if(route==2*m-1)
        {
            if(i==0&&j==m-1)
            {
                if(sum>f)
                {
                    f=sum;
                    k=1;
                }
                else if(sum==f)
                    k++;
            }
            else
                return ;
        }

        visit[i][j]=true;
        for(int t=0;t<4;t++)
        {
            int x,y;
            x=i+p[t][0];
            y=j+p[t][1];
            if(x>=0&&x<m&&y>=0&&y<m&&visit[x][y]==false)
            {
                route++;
                sum+=a[x][y];
//			cout<<a[x][y]<<" ";
                dfs(a,x,y,route,sum);
                sum-=a[x][y];
                visit[x][y]=false;
                route--;
            }
        }
    }
}

发布了1104 篇原创文章 · 获赞 6954 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/a1439775520/article/details/104259129