标签:避免 struct freopen 存储方式 ++ idt 均值 pat set
program:
#include<cstdio>
using namespace std;
struct node
{int x;
 int value;
 int next;
};
node e[60000];
int visited[1505],dis[1505],st[1505],queue[1000];
int main()
{
  int n,m,u,v,w,start,h,r,cur;
  freopen("c.in","r",stdin);
  freopen("c.out","w",stdout); 
  while(scanf("%d%d",&n,&m)!=EOF)
  {
    for(int i=1;i<=1500;i++)
      {visited[i]=0;
       dis[i]=-1;
       st[i]=-1;  //这个初始化给下边那个while循环带来影响
      }
 
   for(int i=1;i<=m;i++)
      {
       scanf("%d%d%d\n",&u,&v,&w);     
       e[i].x=v;            //记录后继节点    相当于链表中的创建一个节点,并使得数据域先记录
       e[i].value=w;
       e[i].next=st[u];     //记录顶点节点的某一个边表节点的下标,相当于在链表中吧该边表节点的next指针先指向他的后继边表节点
       st[u]=i;                //把该顶点的指针指向边表节点,相当于链表中的插入中,头结点的指针改变
      }
    start=1;
    visited[start]=1;
    dis[start]=0;
    h=0;
    r=1;
    queue[r]=start;
    while(h!=r)
     {
      h=(h+1)%1000;
      cur=queue[h];
      int tmp=st[cur];
      visited[cur]=0;
    
     while(tmp!=-1)
        {
            if (dis[e[tmp].x]>dis[cur]+e[tmp].value)           
            {
                   dis[e[tmp].x]=dis[cur]+e[tmp].value;
                    if(visited[e[tmp].x]==0)
                      {
                           visited[e[tmp].x]=1;
                           r=(r+1)%1000;
                            queue[r]=e[tmp].x;
                       }
            }
         tmp=e[tmp].next;      
        }
     } 
    printf("%d\n",dis[n]);
  }
  return 0;   
}
标签:避免 struct freopen 存储方式 ++ idt 均值 pat set
原文地址:http://www.cnblogs.com/552059511wz/p/6850822.html