#include <iostream.h>
#include <malloc.h>
#define INFINITY 10000typedef struct {                     //构造邻接矩阵
int adj;                                            //权
char *mes;                                          //信息
}ArcCell,AdjM[10][10];                                          typedef struct {                                        //构造无向图                     
int vexs[10];                                     //顶点
AdjM arcs;                                          //邻接矩阵
int vexnum,arcnum;                                  //顶点数、边数
}MGraph;                                                int LocVex(MGraph G,int v)     //查找顶点V
{
int i=0;
while(G.vexs[i]!=v)
{
++i;                                            //查找下一顶点
}
return i;                                           //返回i
}int CreatM(MGraph &G)     //创建图用邻接矩阵表示
{
int v1,v2;
int i,j,w;
cout<<"040808_赵博_信息安全"<<endl;
cout<<"最小生成树问题,用Prim算法解决.用10个顶点代表10台电脑"<<endl;
cout<<"输入图G的边数,按回车确定,注意:边数应该在9到45之间"<<endl;
cin>>G.arcnum;
G.vexnum=10;
for(i=0;i<G.vexnum;++i)
{
G.vexs[i]=i+1;                                  //顶点编号从1开始
}
for(i=0;i<G.vexnum;++i)
{
for(j=0;j<G.vexnum;++j)

G.arcs[i][j].adj=INFINITY;                  //两点之间没有连线的话认为权为INFINITY
G.arcs[i][j].mes=NULL;                      //这时没有边的相关信息
}
}
for(int k=0;k<G.arcnum;++k)

cout<<"输入第"<<k+1<<"条边的起点、终点和权,用空格分开"<<endl;
cin>>v1>>v2>>w; //输入一条边依附的两点及权值
i=LocVex(G,v1);      //确定顶点V1在图中的位置
j=LocVex(G,v2);                                 //确定顶点V2在图中的位置
G.arcs[i][j].adj=w;                             //无向图
        G.arcs[j][i].adj=w;
}
return G.vexnum;
}int Prim(int g[10][10],int n,int u) //本程序用Prim算法构造最小生成树,从顶点u开始构造
{
int lowcost[10]; //lowcost[]存储当前集合U分别到剩余结点的权值最小边
int prevex[10]; //prevex[]存储权值最小边在U中的结点
int i,j,k,min; 
for(i=0;i<n;i++)
{
lowcost[i]=g[u][i]; //记录u到各个顶点的权(此处指布线花费)
prevex[i]=0; //顶点未加入到最小生成树中 

lowcost[u]=0; //标志顶点1加入U集合 
for(i=0;i<n-1;i++) //形成n-1条边的生成树 
{
min=INFINITY; 
k=0; 
for(j=0;j<n;j++) //寻找满足边的一个顶点在U,另一个顶点在V的最小边 
if((lowcost[j]<min) && (lowcost[j]!=0)) 
{
min=lowcost[j]; 
k=j; 

cout<<"边<"<<prevex[k]+1<<","<<k+1<<">的权为:"<<min<<endl; 
lowcost[k]=0; //顶点k加入U 
for(j=0;j<n;j++) //修改由顶点k到其他顶点边的权值 
if(g[k][j]<lowcost[j]) 
{
lowcost[j]=g[k][j]; 
prevex[j]=k; 

cout<<endl;

return 0;
} void main()

MGraph G;
int d,g[10][10];
d=CreatM(G);
for(int i=0;i<G.vexnum;++i)
for(int j=0;j<G.vexnum;++j)
g[i][j]=G.arcs[i][j].adj; //把邻接表换成邻接矩阵,从0算起
cout<<"最小生成树为:"<<endl;
Prim(g,G.vexnum,0);
cout<<"按以上最小生成树布线最省"<<endl;
}
这个程序用VC++编译连接好之后,Ctrl+F5可以成功运行exe,没有问题;但直接双击“Debug”文件夹中的exe程序却在生成最小生成树时出错。请问这是为什么啊?这两个操作有什么区别么?