贪睡熊猫 2019-10-22 13:55 采纳率: 14.3%
浏览 245

一个关于ccf2016年4月份第四题的问题

一个带上时间维度的bfs,代码比较简单,几十行,逻辑较为简单,但是结果是超时,感觉在这个基础上优化算法的可能性也不是很大,麻烦走过路过的大佬帮在下看看哪里出了问题

下面是题目:

图片说明

这是本人的代码:

#include<iostream>
#include<string.h>
#include<queue>
using namespace std;

const int r_rem[4]={0,0,1,-1};
const int c_rem[4]={1,-1,0,0};
int dan_be[100+10][100+10];
int dan_en[100+10][100+10];

class loc
{
    public:
    int r; int c;int t;
    loc(int a1,int a2,int a3);
};

loc::loc(int a1,int a2,int a3)
{
    this->r=a1;this->c=a2;this->t=a3;
}

int bfs(loc now,int row_num,int column_num)
{
    queue<loc> Q;
    Q.push(now);
    while(!Q.empty())
    {
        loc tem=Q.front();
        Q.pop();
        if(tem.r==row_num&&tem.c==column_num)
        return tem.t;

        for(int n=0;n<4;n++)
        {
            if((tem.t+1<dan_be[tem.r+r_rem[n]][tem.c+c_rem[n]]||tem.t+1>dan_en[tem.r+r_rem[n]][tem.c+c_rem[n]])&&
            tem.r+r_rem[n]>0&&tem.r+r_rem[n]<=row_num&&tem.c+c_rem[n]>0&&tem.c+c_rem[n]<=column_num)
            {
                loc next(tem.r+r_rem[n],tem.c+c_rem[n],tem.t+1);
                Q.push(next);
            }
        }
    }
}

int main()
{
    memset(dan_be,-1,sizeof(dan_be));
    memset(dan_en,-1,sizeof(dan_en));

    int row_num=0,column_num=0,dan_num=0;
    cin>>row_num>>column_num>>dan_num;

    for(int n=0;n<dan_num;n++)
    {
        int t1=0,t2=0,t3=0,t4=0;
        cin>>t1>>t2>>t3>>t4;
        dan_be[t1][t2]=t3;
        dan_en[t1][t2]=t4;
    }

    loc now(1,1,0);
    cout<<bfs(now,row_num,column_num);
    return 0;
}

图片说明

  • 写回答

1条回答 默认 最新

  • bobhuang 2019-10-22 16:53
    关注

    找到参考的代码,用了类似的算法,在具体的数据表达上更高效些,可能可以帮到你。
    https://blog.csdn.net/wl16wzl/article/details/79339175
    https://blog.csdn.net/tigerisland45/article/details/54934916

    评论

报告相同问题?

悬赏问题

  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)