迷宫最大和

简介: [题目描述] 有一个n*n的迷宫,每个方格里都有着相应的数字。你从左上角出 发,每次可以向上下左右四个方向最多(注意是最多,不是必须)移动k格, 并且要求你每次到达的方格里的数字必须大于上一次所在方格的数字。

[题目描述] 有一个n*n的迷宫,每个方格里都有着相应的数字。你从左上角出

发,每次可以向上下左右四个方向最多(注意是最多,不是必须)移动k格,

并且要求你每次到达的方格里的数字必须大于上一次所在方格的数字。现在要

求你走过的方格的所有数之和最大,问这个最大和是多少。

 [输入] 输入数据第一行为两个正整数N、K(1<=N<=100,0<=K<=N)接下来的n

行,每行有n个不超过integer范围的整数,表示地图中的数。

 [输出] 输出数据只有一行,为最大的和。

 [输入输出示例]

输入(maze.in) 3 1

2 5 3

6 2 4

7 9 2

 输出(maze.out) 31

 [评分标准] 对于每个测试数据,如果你能够得出正确的答案,那么你将得到

满分,否则得0分。

 

 1 //按题意,若每次移动一格,则最后一个一定是较大的一个数 ,从左上移动到右下,还没找到错误 
 2 #include <iostream>
 3 #include <cstring>
 4 #include <queue>
 5 using namespace std;
 6 
 7 //上下左右 
 8 int pos[4][2] = {-1,0,1,0,0,-1,0,1};
 9 bool vis[100][100] = {0};
10 int sum = 0;
11 queue <int > q;
12 int ans[4];
13 
14 int max(int *ans)
15 {
16     int s = ans[0];
17     for(int i=1; i<4; i++)
18     if(ans[i]>s)
19         s = ans[i];
20     return s;
21 }
22 
23 int bfs(int str[][100],int n,int row,int col)
24 {
25     int ii = row,jj = col;
26     while(!q.empty())
27     {
28         int head = q.front();
29         sum += head;
30         vis[ii][jj] = 1;
31         q.pop();
32         for(int k=0; k<4; k++)
33         {
34             ii += pos[k][0];
35             jj += pos[k][1];
36             bool flag = ii>=0&&ii<n&&jj>=0&&jj<n;
37             if(flag&&!vis[ii][jj]&&str[ii][jj]>str[row][col])
38             {
39                 q.push(str[ii][jj]);
40                 if(ii==n-1&&jj==n-1)
41                 {
42                     if(ans[k]<(ans[k]+str[ii][jj]));
43                         ans[k] = ans[k]+str[ii][jj];
44                     return str[ii][jj];    
45                 }
46                 int temp = sum + bfs(str,n,ii,jj);
47                 if(ans[k]<temp)
48                     ans[k] = temp;                         
49             } 
50             ii = row;
51             jj = col;          
52         }
53     }
54     return  max(ans);    
55 }
56 
57 int main()
58 {
59     int i,j,k;
60     int n;
61     int num[100][100];
62     while(cin>>n)
63     {
64         memset(num,0,sizeof(num));
65         memset(vis,0,sizeof(vis));
66         memset(ans,0,sizeof(ans));
67         vis[0][0] = 1;//访问过了 
68         while(!q.empty())//因为使用了递归,则 队列和结果必须放在全局 
69             q.empty();
70         for(i=0; i<n; i++)
71             for(j=0; j<n; j++)
72             {
73                 cin>>num[i][j];//输入不管正负无关紧要 
74             }
75         int res = 0;
76         q.push(num[0][0]);
77         vis[0][0] = 1;
78         res = bfs(num,n,0,0);
79         cout<<res<<endl;      
80     }
81     return 0;   
82 } 
83  
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int pos1[4] = {-1,1,0,0};
 6 int pos2[4] = {0,0,-1,1};
 7 int f[105][105] = {0};
 8 
 9 int find(int a[][105], int n,int k, int row, int col)
10 {
11     int i,j;
12     if(f[row][col])//必须要有返回值,否则下次的递归就出不来 
13         return f[row][col];
14     for(i=0; i<4; i++)
15         for(j=1; j<=k; j++)//最多K步,不是必须K步
16         {
17             int t1 = row + pos1[i]*j;
18             int t2 = col + pos2[i]*j;
19             bool flag = t1>=0&&t1<n&&t2>=0&&t2<n;
20             if(flag)
21             {
22                 if(a[t1][t2]>a[row][col]&&find(a,n,k,t1,t2)>f[row][col])
23                     f[row][col] = find(a,n,k,t1,t2);
24             }              
25         }
26     f[row][col] += a[row][col];
27     return f[row][col];
28 }
29 
30 int main()
31 {
32     //freopen("maze.in","r",stdin);
33     //freopen("maze.out","w",stdout);
34     int i,j;
35     int n,k;
36     int a[105][105];
37     cin>>n>>k;
38     for(i=0; i<n; i++)
39         for(j=0; j<n; j++)
40             cin>>a[i][j];
41     int res = find(a,n,k,0,0);
42     cout<<res<<endl;
43     while(1);
44     return 0;
45 }   

 

 

目录
相关文章
|
3月前
|
存储
每日一题——地下迷宫(迷宫问题II)
每日一题——地下迷宫(迷宫问题II)
|
3月前
|
存储 算法
使用 BFS 解决走迷宫问题
使用 BFS 解决走迷宫问题
36 1
|
3月前
|
算法 Java C++
走迷宫(BFS)
走迷宫(BFS)
26 0
|
9月前
1255:迷宫问题 2021-01-09
1255:迷宫问题 2021-01-09
|
9月前
1252:走迷宫 2021-01-05
1252:走迷宫 2021-01-05
|
9月前
|
机器学习/深度学习
1215:迷宫
1215:迷宫
|
10月前
洛谷 P1141 01迷宫
洛谷 P1141 01迷宫
51 0
|
10月前
洛谷P1605:迷宫
洛谷P1605:迷宫
48 0
|
11月前
AcWing——方格迷宫(有点不一样的迷宫问题)
AcWing——方格迷宫(有点不一样的迷宫问题)
53 0
|
定位技术 C++
基于c++深度优先遍历迷宫
基于c++深度优先遍历迷宫
101 0
基于c++深度优先遍历迷宫