请各位大神帮看看,为什么不能AC呢?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <queue>
#define inf 0x3fffffff
using namespace std;
int N,M;
int head[110];
struct Edge{
int v;
int next;
}e[20010];
int in[110];
int dis[110];
int visit[110];
int cost[20010];
int idx;
void addedge(int a,int b,int val)
{
cost[idx]=val;
e[idx].v=b;
e[idx].next=head[a];
head[a]=idx++;
}
int SPFA()
{
queue<int > Q;
for(int i=1;i<=N;i++)
dis[i]=inf;
dis[1]=0;
Q.push(1);
in[1]++;
visit[1]=1;
while(!Q.empty())
{
int temp=Q.front();
Q.pop();
visit[temp]=0;
for(int p=head[temp];p!=-1;p=e[p].next)
{
int v=e[p].v;
if(!visit[v]&&dis[v]>dis[temp]+cost[p])
{
dis[v]=dis[temp]+cost[p];
Q.push(v);
visit[v]=1;
in[v]++;
//if(in[v]>N)
// return -1;
}
}
}
// if(dis[N]==inf)
// return inf;//这个其实写的不怎么样了.但是与其去改 还不如直接就写成这样呢...
// else
return dis[N];
}
int main()
{
while(scanf("%d%d",&N,&M),N|M)
{
memset(visit,0,sizeof(visit));
memset(cost,0x3f,sizeof(cost));
memset(head,-1,sizeof(head));
memset(in,0,sizeof(in));
idx=0;
memset(in,0,sizeof(in));
int a,b,val;
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&a,&b,&val);
addedge(a,b,val);
addedge(b,a,val);
}
int ans=SPFA();
// if(ans==-1)
// printf("have a circle\n");
// else if(ans==inf)
// printf("not reach.\n");
// else
printf("%d\n",ans);
}
return 0;
}