原题链接:Biggest Number
做不出来的同志直接把代码抄上吧
#include<iostream>
#include<cstring>
using namespace std;
short row,col,vis[20][20],ans[100],ansl,v[100],stack[100][2],used1[20][20],z;
char maze[20][20];
const short dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
void solve(int x,int y,int len)
{
short i,j,top,bottom,xx,yy;
if((len>ansl)||(len==ansl)&&(z==1))
{
memcpy(ans,v,sizeof(v));
ansl=len;
z=0;
}
memset(used1,0,sizeof(used1));
used1[x][y]=1;
top=0;bottom=1;
stack[0][0]=x;
stack[0][1]=y;
while(top<bottom)
{
for(i=0;i<4;i++)
{
xx=stack[top][0]+dx[i];
yy=stack[top][1]+dy[i];
if((xx>=0)&&(xx<row)&&(yy>=0)&&(yy<col)&&(maze[xx][yy]!='#')&&(vis[xx][yy]==0)&&(used1[xx][yy]==0))
{
stack[bottom][0]=xx;
stack[bottom][1]=yy;
used1[xx][yy]=1;
bottom++;
}
}
top++;
}
if(len+top-1<ansl||(len+top-1==ansl)&&(z==-1))
return;
for(i=0;i<4;i++)
{
xx=x+dx[i];
yy=y+dy[i];
if((xx>=0)&&(xx<row)&&(yy>=0)&&(yy<col)&&(maze[xx][yy]!='#')&&(vis[xx][yy]==0))
{
v[len]=maze[xx][yy]-'0';
vis[xx][yy]=1;
if(z!=0)
solve(xx,yy,len+1);
else if(len>=ansl)
{
z=1;
solve(xx,yy,len+1);
z=0;
}
else
{
if (v[len]>ans[len])
{
z=1;
solve(xx,yy,len+1);
z=0;
}
else if(v[len]==ans[len])
{
z=0;
solve(xx,yy,len+1);
z=0;
}
else
{
z=-1;
solve(xx,yy,len+1);
z=0;
}
}
vis[xx][yy]=0;
}
}
}
int main()
{
short i,j;
while(true)
{
cin>>row>>col;
if((row==0)&&(col==0))
break;
for(i=0;i<row;i++)
cin>>maze[i];
memset(ans,0,sizeof(ans));
ans[0]=-1;
ansl=1;
memset(v,0,sizeof(v));
for(i=0;i<row;i++)
for(j=0;j<col;j++)
if(maze[i][j]!='#')
{
vis[i][j]=1;
v[0]=maze[i][j]-'0';
if(maze[i][j]-'0'>ans[0])
{
z=1;
solve(i,j,1);
}
else if(maze[i][j]-'0'==ans[0])
{
z=0;
solve(i,j,1);
}
else if(maze[i][j]-'0'<ans[0])
{
z=-1;
solve(i,j,1);
}
vis[i][j]=0;
}
for(i=0;i<ansl;i++)
cout<<ans[i];
cout<<endl;
}
return 0;
}
嘘,这道题连续让我对着电脑两个多钟,千万别告诉我爸妈,否则我就惨了
9.9 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复