51NOD 1459 迷宫游戏

貌似51nod和不错的样子。

点开基础题做了第一个。

最短路问题,多算一下得分就行了。


#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#include
//#include
#include
//#include
#include

#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define PI 3.141592654
#define CLR(a,b) memset(a,b,sizeof(a))
#define FOR(i,a,b) for(int i=a;i=b;i--)
#define sf scanf
#define pf printf
#define all(v) (v).begin(),(v).end()
#define acfun std::ios::sync_with_stdio(false)

#define SIZE (1000 +2)
#define MOD 1000000007
using namespace std;

struct node
{
    int v,time;
    void init(int vv,int tt)
    {
        v=vv,time=tt;
    }
};

vectorg[SIZE];
int n,m;
int point[SIZE];

void SPFA(int start,int thend)
{
    queueq;
    bool vis[SIZE];
    int dis[SIZE];
    int ans[SIZE];
    CLR(vis,0);
    CLR(ans,0);

    FOR(i,0,n+1)
        dis[i]=INF;
    q.push(start);
    vis[start]=1;
    dis[start]=0;


    while(!q.empty())
    {
        int u=q.front();q.pop();
        vis[u]=0;
        FOR(j,0,g[u].size())
        {
            int v=g[u][j].v;
            int time=g[u][j].time;
            if(dis[v]>dis[u]+time)
            {
                dis[v]=dis[u]+time;
                ans[v]=ans[u]+point[v];
                if(!vis[v])
                {
                    vis[v]=1;
                    q.push(v);
                }
            }
            else if(dis[v]==dis[u]+time)
            {
                if(ans[v]


你可能感兴趣的:(Graph,Theory)