|
|
вернуться в форумОбщий форумWhy I have Crash(acces violation) Послано Husan 15 апр 2008 02:39 #include<iostream> using namespace std; const maxl=10000; int n,m,a[405][405]={0}; int min_p=100000,p[405]={0}; int b[20002],e[20002],d[405],pred[405]; int circl(int v,int e) { int i,j,pr[405]={0},bliz,mind; for(i=1;i<=n;i++) { pred[i]=v; d[i]=a[v][i]; } pr[v]=1; pred[v]=v; for(i=1;i<=n;i++) { mind=maxl; for(j=1;j<=n;j++) if(pr[j]==0 && mind>d[j]){mind=d[j];bliz=j;}; pr[bliz]=1; for(j=1;j<=n;j++) { if(pr[j]==0 && d[j]>d[bliz]+a[bliz][j]) { d[j]=d[bliz]+a[bliz][j]; pred[j]=bliz; } } } return d[e]; } void vvod() { int i,j,k1,k2,c;
cin>>m;
for(i=1;i<=m;i++) { cin>>b[i]>>e[i]>>c;
k1=b[i];k2=e[i];
if(a[k1][k2]!=maxl)a[k1][k2]=a[k2][k1]=min(a[k1][k2],c); else a[k1][k2]=a[k2][k1]=c; } } int main() { int i,j,k,temp,dl,z=0; bool pr=0; for(k=1;n!=-1;k++) {
cin>>n;
if(n==-1)break; for(i=1;i<=n;i++) for(j=1;j<=n;j++)a[i][j]=maxl; vvod(); for(i=1;i<=m;i++) { temp=a[b[i]][e[i]]; a[b[i]][e[i]]=maxl; dl=circl(b[i],e[i]); a[b[i]][e[i]]=temp; if(dl+temp<maxl) { if(min_p>dl+temp) { min_p=dl+temp; z=e[i]; for(j=1;j<=n;j++)p[j]=pred[j]; } pr=1; } } if(!pr)cout<<"No solution."; else { cout<<z<<" "; while(z!=p[z]){z=p[z];cout<<z<<" ";} } cout<<endl; min_p=100000; pr=0; }
return 0; } I think i use right massiv limits :) |
|
|