网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月31日漏签0天
c语言吧 关注:799,053贴子:4,359,288
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回c语言吧
>0< 加载中...

某专业的拓扑排课系统。

  • 只看楼主
  • 收藏

  • 回复
  • 悠悠子矜april
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include<windows.h>#define MAXV 10typedef char VerType;//顶点值类型struct ArcNode{ int adjvex; //邻接点域,存储该顶点对应的下标struct ArcNode* next;//指向下一个临界点的指针点}ArcNode;typedef struct VNode{ int in; //入度VerType data; //值char name[MAXV];struct ArcNode* firstedge; //邻接表头指针}VNode;typedef struct adjGraph{ //邻接表储存结构struct VNode vers[MAXV]; //顶点和邻接点的数组int vexnum, arcnum; //顶点数和边数}adjGraph;//拓扑排序int TopSort(adjGraph* G){ struct ArcNode* e;int i, k, gettop;int top = 0;//栈指针int count = 0;//统计输出顶点个数int* stack; //定义栈存储入度为0的顶点stack = (int *)malloc(G->vexnum * sizeof(int)); //开辟栈空间for(i=0;i<G->vexnum;i++) //遍历所有结点if(G->vers[i].in == 0)stack[++top] = i; //将入度为0的顶点入栈while(top !=0){ //栈不空gettop = stack[top--]; //出栈一个顶点printf("%c %c ",G->vers[gettop].data,G->vers[gettop].name);//输出顶点count++; //统计输出顶点数for(e=G->vers[gettop].firstedge; e; e = e->next){ //弧表遍历k = e->adjvex;if(!(--G->vers[k].in))//将k号顶点邻接点的入度减1stack[++top] = k;//若为0则入栈,以便下次循环输出}}if(count < G->vexnum)//如果count小于顶点数,说明存在环return 0;elsereturn 1;}/* 数边数File *fp;int a,b,c;fscanf(fp,"%d",&b);for(i=0;i<G->vexnum;i++){fscanf(fp,"%d",&G->vers[i].data); getc(fp); while(fgetc(fp)!=0){ a++;c=fgetc(fp);}*//*File *fp; 文件读取int i,m;if((fp=fopen("date.txt","r"))==NULL){return;}fscanf(fp,"%d",&G->vexnum);for(i=0;i<G->vexnum;i++){fscanf(fp,"%d",&G->vers[i].data);G->vers[i].name=getc(fp); n=G->vers[i].data; while(fgetc(fp)!=0){m=fgetc(fp);}}*///创建图void CreateGraph(adjGraph * G){int i, m, n;FILE *fp;if((fp=fopen("date.txt","r"))==NULL){return;}int a=0,b=0,c=0; fscanf(fp,"%d",&b); for(i=0;i<G->vexnum;i++){fscanf(fp,"%d",&b); fgetc(fp); while(fgetc(fp)!=0){ a++;c=fgetc(fp);}G->arcnum=a; //边数 fscanf(fp,"%d",&G->vers[i].data); /*顶点数*/ for(i=0;i<G->vexnum;i++){ fscanf(fp,"%d",G->vexnum); fscanf(fp,"%s",G->vers[i].name);n=G->vers[i].data; while(fgetc(fp)!=0){m=fgetc(fp);//初始化图头结点指针和入度值G->vers[i].firstedge = NULL;//头结点指针为空G->vers[i].in = 0; //入度为0 for(i=0;i<G->arcnum;i++){ //边关系struct ArcNode *newNode = (struct ArcNode*)malloc(sizeof(struct ArcNode));newNode->next = G->vers[m].firstedge == NULL ? NULL : G->vers[m].firstedge; //三目运算符newNode->adjvex = n;G->vers[m].firstedge = newNode; //G->vers[n].in++;//入度+1}}}}} //完成函数int sGraph(){ struct adjGraph *G=(struct adjGraph*)malloc(sizeof(struct adjGraph)) ;CreateGraph(G);if(TopSort(G)){printf("\n课程排序完成!\n");}else{printf("\n课程图存在环,无法排课!\n");}return 0;}//菜单模块void menu(){printf("-------------------------欢迎进入拓扑课程排序系统-------------------------------");printf("\n");printf("-------------------------------1、排课------------------------------------------");printf("\n");printf("-------------------------------0、退出系统--------------------------------------");printf("\n");printf("--------------------------------------------------------------------------------\n");printf("\n");printf("\t\t请输入指令(0-1): ");} int main(){int num; system("color 0B"); while(1) { menu(); scanf("%d",&num); system("cls"); switch(num) { case 1: sGraph();break; case 0: printf("谢谢使用!\n\n"); return 0; default :printf("\n无效的指令!\n\n\n"); } system("pause"); system("cls");}}


  • 悠悠子矜april
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求解如何读取文件中的内容


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示