提交后提示运行超时,帮忙看看

自测能跑过,但提交后提示运行超时,推测可能是计算路线时陷入死循环了,帮忙看看(没有任何算法基础,纯靠想,所以代码有点长):

#include <iostream>
using namespace std;

int n, m, s, t;
int** haveSearched, hSNum = 0;
int** paths;
bool exist = false;
int totalLen = 10000000;

int append(int** &arr, int* addArr) //添加数组
{
    int num = sizeof(arr) / sizeof(arr[0]); //获取现有长度

    int** newArr = new int* [num + 1];
    for (int j = 0; j < num; j++) //拷贝前面的元素
    {
        newArr[j] = arr[j];
    }
    newArr[num] = addArr; //新增数组
    arr = newArr; //替代之前的元素

    return num + 1; //放回新数组的长度
}

int searchPath(int num, int x, int len) //从某一点开始,寻找连接这一点的所有路
{
    int* okPath = new int[m];
    int* nextPoint = new int[m];
    int okNum = 0;

    //寻找
    for (int i = 0; i < m; i++)
    {
        bool bl = true;
        for (int j = 0; j < hSNum; j++) //不走重复的路
        {
            if (i == haveSearched[x][j])
            {
                bl = false;
            }
        }

        if (bl)
        {
            if (paths[i][0] == num) //找到路
            {
                exist = true; //存在路
                haveSearched[x][hSNum] = i; //记录这段路
                hSNum++;
                okPath[okNum] = i;
                nextPoint[okNum] = paths[i][1];
                okNum++;
            }
            else if (paths[i][1] == num) //类似
            {
                exist = true; //存在路
                haveSearched[x][hSNum] = i; //记录这段路
                hSNum++;
                okPath[okNum] = i;
                nextPoint[okNum] = paths[i][0];
                okNum++;
            }
        }
    }

    //全部找完
    if (okNum >= 1) //至少有一条路
    {
        int i = okPath[0]; //第一条路
        if (nextPoint[0] == t) //到达终点
        {
            totalLen = totalLen < (len + paths[i][2]) ? totalLen : (len + paths[i][2]); //取最小值
        }
        else { //没到达
            searchPath(nextPoint[0], x, len + paths[i][2]); //增加路程并继续搜索
        }

        if (okNum >= 2) //还有其它路
        {
            for (int j = 1; j < okNum; j++)
            {
                i = okPath[j];
                if (nextPoint[j] == t) //到达终点
                {
                    totalLen = totalLen < (len + paths[i][2]) ? totalLen : (len + paths[i][2]); //取最小值
                }
                else { //没到达
                    int arrLen = append(haveSearched, new int[m]); //加一个数组
                    for (int k = 0; k < m; k++)
                    {
                        haveSearched[arrLen - 1][k] = haveSearched[x][k]; //复制前面走过的路
                    }
                    searchPath(nextPoint[j], arrLen - 1, len + paths[i][2]); //换另一个数组,增加路程并继续搜索
                }
            }
        }
    }


    return 0;
}

int main()
{
    cin >> n >> m >> s >> t; //输入
    paths = new int* [m]; //创建一个指针数组(即类型为整型指针的数组)
    for (int i = 0; i < m; i++)
    {
        paths[i] = new int[3]; //指针数组中的每个指针都分配一个数组,形成二维数组
    }

    for (int i = 0; i < m; i++) //初始化每一条道路
    {
        int a, b, v;
        cin >> a >> b >> v;
        paths[i][0] = a;
        paths[i][1] = b;
        paths[i][2] = v;
    }

    //从s点开始, 寻找连接s点的每一条路
    exist = false;
    haveSearched = new int* [1];
    haveSearched[0] = new int[m];
    searchPath(s, 0, 0);

    if (totalLen == 10000000) //没找到一个合适的路径,或者是原地tp
    {
        totalLen = 0;
    }

    if (exist == false) //没找到过
    {
        cout << -1 << endl; //输出-1
    }
    else //有找到
    {
        cout << totalLen << endl; //输出最短路径
    }

    return 0;
}

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务