在c语言中nextarc是什么意思,c语言求解多段图〔向前处理法〕.docx

c语言求解多段图〔向前处理法〕

#include#include#define Infinity 1000 //无穷大#define Max 45#define null 0

typedef struct ArcNode //边结点{int adjvex; //边的终点int weigh; //边的权struct ArcNode *nextarc; //下一条邻接边}ArcNode;

typedef struct VNode //顶结点{char data; //顶点ArcNode *firstarc; //第一条邻接边}VNode,AdjList[Max];

typedef struct //图{int vexnum,arcnum; //顶点数,边数AdjList vertices; //顶点集合表}Graph;

void CreatGraph(Graph *G) //建立有向图{int i,j;FILE *fp;ArcNode *p;if((fp=fopen("Init.dat","r"))==NULL) {printf("Cannot open the file!\n");exit(0);}fscanf(fp,"%d %d",&G->vexnum,&G->arcnum); //从文件中读取顶点数和边数for(i=1;i<=G->vexnum;i++) {fscanf(fp,"%c",&G->vertices[i].data); //从文件中读取顶点名称G->vertices[i].firstarc=NULL; //将第一条邻接边的地址赋为空}for(i=1;i<=(*G).arcnum;i++) {p=(ArcNode*)malloc(sizeof(ArcNode));fscanf(fp,"%d %d %d",&j,&p->adjvex,&p->weigh); p->nextarc=G->vertices[j].firstarc; //使用插表头的方法插入邻接边G->vertices[j].firstarc=p;}}

void main(){int i,j;int cost[13],d[13],q[6];int b,min;Graph *G;G=(Graph*)malloc(sizeof(Graph));ArcNode *p;CreatGraph(G);printf("The Graph:\n"); //输出有向图for(i=1;ivexnum;i++){ p=G->vertices[i].firstarc; printf("%d-->%d",i,p->adjvex);while(p->nextarc!=null){printf(" %d",p->nextarc->adjvex);p=p->nextarc;}printf("\n");} printf("12\n");

//向后处理法cost[12]=0;for(j=11;j>=1;j--){p=G->vertices[j].firstarc;min=p->weigh+cost[p->adjvex];cost[j]=min;d[j]=p->adjvex;while (p->nextarc!=null){b=p->nextarc->weigh+cost[p->nextarc->adjvex];if(bnextarc->adjvex;}p=p->nextarc;}} //找一条最小路径q[1]=1;q[5]=12;for(j=2;j<=4;j++)q[j]=d[q[j-1]];printf("a shortest way is:\n");for(i=1;i<=4;i++)printf("%d-->",q[i]);printf("%d",q[i]);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值