poj 1511怎么老是Runtime Error
#include<iostream>#defineN8000usingnamespacestd;#include<stdio.h>#include<string.h>#d...
#include <iostream>
#define N 8000
using namespace std;
#include <stdio.h>
#include <string.h>
#define UP 99999
long map[N][N];
long p,q;
long ans;
long dis[N];
void dijkstra(long v)
{
long i,j,mindis,minnode;
bool visit[N];
memset(visit,false,sizeof(visit));
for( i=1;i<=p;i++)
dis[i]=map[v][i];
dis[v]=0;
visit[v]=true;
for( i=1;i<=p;i++)
{
mindis=UP;
for( j=1;j<=p;j++)
if(!visit[j] && mindis>dis[j])
{
mindis=dis[j];
minnode=j;
}
visit[minnode]=true;
for( j=1 ;j <=p ; j++)
if(!visit[j] &&dis[j]>dis[minnode]+map[minnode][j])
dis[j]=dis[minnode]+map[minnode][j];
if( v!=1&&visit[1]==true )
break;
}
}
int main()
{
freopen("input.txt","r",stdin);
long n , i , j ;
long c,r;
cin>>n;
while( n-- )
{
memset( map , 0 ,sizeof(map) );
cin >> p >> q ;
for( i=1 ; i<=p ; i++ )
for( j=i ; j<=p ; j++ )
{
if( i==j ) continue ;
map[i][j]=map[j][i]=UP;
}
for( i=1 ; i<=q ; i++ )
{
cin >> c >> r ;
cin>>map[c][r] ;
}
ans = 0;
dijkstra(1);
for( i=2 ; i<=p ; i++ )
ans+=dis[i];
for( i=2 ; i<=p ; i++ )
{
dijkstra(i);
ans+=dis[1];
}
cout << ans <<endl;
}
return 0;
}
数组开大了会超内存呀,怎么解决呀? 展开
#define N 8000
using namespace std;
#include <stdio.h>
#include <string.h>
#define UP 99999
long map[N][N];
long p,q;
long ans;
long dis[N];
void dijkstra(long v)
{
long i,j,mindis,minnode;
bool visit[N];
memset(visit,false,sizeof(visit));
for( i=1;i<=p;i++)
dis[i]=map[v][i];
dis[v]=0;
visit[v]=true;
for( i=1;i<=p;i++)
{
mindis=UP;
for( j=1;j<=p;j++)
if(!visit[j] && mindis>dis[j])
{
mindis=dis[j];
minnode=j;
}
visit[minnode]=true;
for( j=1 ;j <=p ; j++)
if(!visit[j] &&dis[j]>dis[minnode]+map[minnode][j])
dis[j]=dis[minnode]+map[minnode][j];
if( v!=1&&visit[1]==true )
break;
}
}
int main()
{
freopen("input.txt","r",stdin);
long n , i , j ;
long c,r;
cin>>n;
while( n-- )
{
memset( map , 0 ,sizeof(map) );
cin >> p >> q ;
for( i=1 ; i<=p ; i++ )
for( j=i ; j<=p ; j++ )
{
if( i==j ) continue ;
map[i][j]=map[j][i]=UP;
}
for( i=1 ; i<=q ; i++ )
{
cin >> c >> r ;
cin>>map[c][r] ;
}
ans = 0;
dijkstra(1);
for( i=2 ; i<=p ; i++ )
ans+=dis[i];
for( i=2 ; i<=p ; i++ )
{
dijkstra(i);
ans+=dis[1];
}
cout << ans <<endl;
}
return 0;
}
数组开大了会超内存呀,怎么解决呀? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询