宝藏迷宫 这样哪错了 题目ID 9862 最近探险家们在X国发现了一处遗迹,里面的地形复杂好比一个迷宫,但是里面有非常多的宝藏。 探险家们提前用“鹰眼”探查到了这个迷宫的地图结构,可以用一个二维图来表示。'#'代表无法跨越的陷阱,'*'代表可以去的位置,某些位置上存在宝藏,用一个数字表示这个宝藏的价值。遗迹特别神奇,某个位置一旦经过就会消失,不可再次到达。在迷宫中移动有上下左右四种方式。 探险家们想要知道从左上角的入口到达右下角的出口,最多可以获得多少宝藏?

#include<bits/stdc++.h>
using namespace std;
int n,a1,a2,b1,b2,m,ans=0x3f3f3f3f,sum,vis[101][101];
char a[101][101];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void f(int x,int y,int cnt)
{
if(x>n||y>m)
return ;
if(a[y]>=‘0’&&a[y]<=‘9’)
cnt+=(a[y]-‘0’);
sum=cnt;
vis[y]=1;
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&vis[xx][yy]==0)
{
vis[xx][yy]=1;
f(xx,yy,cnt);
vis[xx][yy]=0;
}
}
vis[y]=0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
f(1,1,0);
cout<<sum;
return 0;
}

3 个赞

if(xx>0&&yy>0&&xx<=n&&yy<=m&&vis[xx][yy]==0)
此处增加一个条件:c[xx][yy]!=‘#’

1 个赞

f(xx,yy,cnt);改为:
if(c[xx][yy]!=‘*’)f(xx,yy,cnt+c[xx][yy]-‘0’)
else f(xx,yy,cnt);

你可以这样:

#include<bits/stdc++.h>
using namespace std;
int n,a1,a2,b1,b2,m,ans=0x3f3f3f3f,sum,vis[101][101];
char a[101][101];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void f(int x,int y,int cnt)
{
if(x>n||y>m)
return ;
if(a[y]>=‘0’&&a[y]<=‘9’)
cnt+=(a[y]-‘0’);
sum=cnt;
vis[y]=1;
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&vis[xx][yy]==0)
{
vis[xx][yy]=1;
f(xx,yy,cnt);
vis[xx][yy]=0;
}
}
vis[y]=0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
f(1,1,0);
cout<<sum;
return 0;
}





1 个赞

#include<bits/stdc++.h>
using namespace std;
int n,a1,a2,b1,b2,m,ans=0x3f3f3f3f,sum,vis[101][101];
char a[101][101];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void f(int x,int y,int cnt)
{
if(x>n||y>m)
return ;
if(a[y]>=‘0’&&a[y]<=‘9’)
cnt+=(a[y]-‘0’);
sum=cnt;
vis[y]=1;
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&vis[xx][yy]==0&&a[xx][yy]!=‘#’)
{
vis[xx][yy]=1;
if(a[xx][yy]!=‘*’)f(xx,yy,cnt+a[xx][yy]-‘0’);
else f(xx,yy,cnt);
vis[xx][yy]=0;
}
}
vis[y]=0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
f(1,1,0);
cout<<sum;
return 0;
} 还不对

1 个赞

删掉

2 个赞

image
什么鬼

1 个赞

就是vis[y]

1 个赞

@王子文

1 个赞

下次发帖更多的发一些自己的解决思路出来而不是单纯的让同学们帮你的代码找错

2 个赞