SPFA

#define INF 1e9
#define N 
#define M   
typedef int type;
type dis[N];
bool visit[N];
int que[N];
int head[N],ip;
struct Edge
{
    int to,next;
    type c;
}edge[M];
void add(int u,int v,type c)
{
    edge[ip].to=v; edge[ip].c=c; edge[ip].next=head[u]; head[u]=ip++;
}
void spfa(int start,int numpoint)
{
    memset(visit,0,sizeof(visit));
    FOR(i,0,numpoint) dis[i]=INF;
    int front=-1,tail=-1;
    dis[start]=0; visit[start]=1;  que[++tail]=start;
    int top,to;
    type temp;
    while(front!=tail)
    {
        if(++front>numpoint) front-=numpoint;
        top=que[front];  visit[top]=0;
        for(int p=head[top];p!=-1;p=edge[p].next)
        {
            to=edge[p].to; temp=dis[top]+edge[p].c;
            if(dis[to]>temp)
            {
                dis[to]=temp;
                if(!visit[to])
                {
                    if(++tail>numpoint) tail-=numpoint;
                    que[tail]=to;
                    visit[to]=1;
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值