首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

哪位学过c和c++的高手能把小弟我这个c语言的程序改成c++的

2012-02-23 
哪位学过c和c++的高手能把我这个c语言的程序改成c++的本人只学过c++,可是看数据结构c语言版的有许多地方不

哪位学过c和c++的高手能把我这个c语言的程序改成c++的
本人只学过c++,可是看数据结构c语言版的有许多地方不明白
这个关于图的问题关于输出语句中的许多地方不明白,高手能否帮我把他改成c++的,谢谢了。
#include   "stdio.h "

#define   MAXE   100                                           /*定义最大空间100*/
struct   edges                                                  
{
int   bv;
int   tv;
int   w;
};
typedef   struct   edges   edgeset;
int   seeks(int   set[],int   v)                       /*定义一个整形变量seeks*/
{
int   i;
i=v;
while(set[i]> 0)   i=set[i];
return   i;
}
void   kruskal(edgeset   ge[],int   n,int   e)
{
int   set[MAXE],v1,v2,i,j;
for(i=1;i <n+1;i++)  
set[i]=0;
i=1;
j=1;
while(j <=e&&i <=n-1)
{
v1=seeks(set,ge[j].bv);
v2=seeks(set,ge[j].tv);
if(v1!=v2)
{
printf( "(%d,%d):%d\n ",ge[j].bv,ge[j].tv,ge[j].w);
set[v1]=v2;
i++;
}
j++;
}
}
void   insertsort(edgeset   ge[],int   e)
{
int   i,j;
for(i=2;i <=e;i++)
if(ge[i].w <ge[i-1].w)
{
ge[0]=ge[i];
j=i-1;
while(ge[0].w <ge[j].w)
{
ge[j+1]=ge[j];
j--;
}
ge[j+1]=ge[0];
}
}
void   dijkstra(int   cost[MAXE][MAXE],int   dist[MAXE],int   path[MAXE],int   s[MAXE],int   n,int   v0)                           /*定义函数dijkstra*/
{
int   u,vnum,w,wm;
for(w=1;w <=n;w++)
{
dist[w]=cost[v0][w];
if(cost[v0][w] <32767)
path[w]=v0;
}
vnum=1;
while(vnum <=n-1)
{
wm=32767;
u=v0;
for(w=1;w <=n;w++)
if(s[w]==0&&dist[w] <wm)
{
u=w;
wm=dist[w];
}
s[u]=1;
vnum++;
for(w=1;w <=n;w++)
if(s[w]==0&&dist[u]+cost[u][w] <dist[w]&&cost[u][w]!=32767)
{
dist[w]=dist[u]+cost[u][w];
path[w]=u;
}
}
}
void   printpath1(int   dist[],int   path[],int   s[],int   n,int   v0)       //定义函数printpaht1
{
int   i,k;
for(i=1;i <=n;i++)
if(s[i]==1)
{
k=i;
while(k!=v0)
{
printf( "%d <- ",k);
k=path[k];
}
printf( "%d:%d\n ",k,dist[i]);
}
else
printf( "%d <-%d:32767\n ",i,v0);
}
void   printpath2(int   dist[],int   path[],int   v0,int   v1)                     //定义函数printpath2
{
int   k;
k=v1;
while(k!=v0)
        {
printf( "%d <- ",k);
k=path[k];
        }
printf( "%d:%d\n ",k,dist[v1]);
}
void   main()
{
edgeset   ge[MAXE];
int   cost[MAXE][MAXE],dist[MAXE],path[MAXE],s[MAXE],a,n,e,i,j,k,v0,v1;
printf( "input   the   number   of   point: ");
scanf( "%d ",&n);
printf( "input   the   number   of   edges: ");


scanf( "%d ",&e);
printf( "input   the   edges:\n ");
for(i=1;i <=e;i++)
scanf( "%d,%d,%d ",&ge[i].bv,&ge[i].tv,&ge[i].w);
printf( "please   choise\n ");
printf( "1.kruskal\n   ");
printf( "2.shortpath\n ");
printf( "3.shortpath   between   two   point\n ");
printf( "4.exit\n ");
scanf( "%d ",&a);
while(a!=4)
{
switch(a)
{
case   1:
insertsort(ge,e);
kruskal(ge,n,e);
break;
case   2:
printf( "input   the   start   point: ");/*请输入开始位置*/
scanf( "%d ",&v0);
for(i=1;i <=n;i++)
for(j=1;j <=n;j++)
cost[i][j]=32767;
for(k=1;k <=e;k++)
{
i=ge[k].bv;
j=ge[k].tv;
cost[i][j]=ge[k].w;
}
for(i=1;i <=n;i++)
s[i]=0;
s[v0]=1;
dijkstra(cost,dist,path,s,n,v0);
printpath1(dist,path,s,n,v0);
break;
case   3:
printf( "input   the   start   point: ");/*请输入插入点位置*/
scanf( "%d ",&v0);
printf( "input   the   end   point: ");
scanf( "%d ",&v1);
for(i=1;i <=n;i++)
for(j=1;j <=n;j++)
cost[i][j]=32767;
for(k=1;k <=e;k++)
{
i=ge[k].bv;
j=ge[k].tv;
cost[i][j]=ge[k].w;
}
for(i=1;i <=n;i++)
s[i]=0;
s[v0]=1;
dijkstra(cost,dist,path,s,n,v0);
printpath2(dist,path,v0,v1);
break;
}
printf( "please   choise\n ");
printf( "1.kruskal\n   ");
printf( "2.shortpath\n ");
printf( "3.shortpath   between   two   point\n ");
printf( "4.exit\n ");
scanf( "%d ",&a);
}
}

[解决办法]
printf( "please choise\n ");就是
cout < < "please choise\n ";

scanf( "%d ",&a);就是
cin> > a

printf( "%d <-%d:32767\n ",i,v0);就是
cout < <i < <v0 < < ":32367\n ";

第一个%d就是把i按int数输出。第二个%d就是把v0按int数输出。...

一切只需查一下函数说明就明白了。

热点排行