首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求解poj1724 不是很难 望,必须给分,无限感激

2013-08-09 
求解poj1724 不是很难望高手指点,必须给分,无限感激首先看到这个题目的时候,以为不怎么难,于是用vector邻

求解poj1724 不是很难 望高手指点,必须给分,无限感激
首先看到这个题目的时候,以为不怎么难,于是用vector邻接表....谁知道TLE很多次,于是看别人的代码,下面的就是那个人的代码,首先看懂了之后我就自己写了一次,但是无限次想死,第一,为什么下面的代码中dfs这里一定要从价格为0开始遍历,只要我是改成dfs(1,K,0)然后dfs中判断访问条件处写成m-p->t>0,并且相应的改下面dfs,可是就是无限WA,题目中明明说只要不超过带的钱,选择最短路就可以啦...哎哎....
还有就是各种纠结TLE,我把判断改成下面的竟然也可以TLE

        if(!visited[p->ed])//&& m+p->t<=K && (len+p->l<rt)
        {
if(m+p->t>K)continue;
            if(p->ed==N)
            {
if(len+p->l<rt)
                  rt=len+p->l;
                continue;
            }
            visited[p->ed]=1;
            dfs(p->ed, m+p->t, len+p->l);
            visited[p->ed]=0;
        }
明明就是一个意思...只是访问了之后去判断用的钱是否超过,超过就不访问,这也TLE.....哎哎....真心受伤啦,求一个大神帮帮我....我真的想哭啦..纠结好好久这个...满意就全给分...求解poj1724 不是很难  望,必须给分,无限感激

别人的代码
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int SZ=101;
int K, N, R;//最开始输入的三个数分别是钱,N个城市,R条路
int rt;//这个就是用来输出答案的,保存最短路径
bool visited[SZ];//看看能否访问

struct node
{
    int ed;
    int l;
    int t;
    node* next;
};
node g[SZ];
node sp[SZ*SZ];
int cnt;

void dfs(int st, int m, int len)
{
    for(node* p=g[st].next; p!=NULL; p=p->next)
    {
        if(!visited[p->ed] && m+p->t<=K && (len+p->l<rt))
        {
            if(p->ed==N)
            {
                rt=len+p->l;
                continue;
            }


            visited[p->ed]=1;
            dfs(p->ed, m+p->t, len+p->l);
            visited[p->ed]=0;
        }
    }
}

int main()
{
int i;
    scanf("%d%d%d", &K, &N, &R);
    for( i=1; i<=N; i++) g[i].next=NULL;
    cnt=0;
    for( i=1; i<=R; i++)
    {
        int s, d, l, t;
        scanf("%d%d%d%d", &s, &d, &l, &t);
        node* p=&sp[cnt++];
        p->ed=d; p->l=l; p->t=t;
        p->next=g[s].next;//邻接表操作
        g[s].next=p;
    }
    rt=1000000;
    memset(visited, 0, sizeof(visited));
    visited[1]=1;
    dfs(1, 0, 0);//这里表示从1号城市,0元钱,0路径长度开始dfs
if(rt<1000000)
    printf("%d\n", rt);
else
printf("-1\n");
    return 0;
}

好高级的样子,不会,帮顶

热点排行