求大神~帮帮忙看看这个程序可以运行 但是后面不执行,帮忙改改~_程序设计吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:15,534贴子:
求大神~帮帮忙看看这个程序可以运行 但是后面不执行,帮忙改改~收藏
/* 本程序的功能为实现图遍历的演示 */ #include&stdio.h&
/*标准输入输出头文件*/ #include&string.h& #include&malloc.h& /* malloc(头文件 */ #include&stdlib.h& /* 标准库头文件 */ #include&conio.h&
/*控制台输入输出*/
#define MAX_NAME 10
/* 顶点字符串的最大长度+1 */ #define FALSE 0 #define TRUE 1 #define OK 1 #define ERROR 0 typedef int B
/* Boolean是布尔类型,其值是TRUE或FALSE */ typedef int InfoT
/* 权值类型 */ typedef int QElemT typedef int S /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef char VertexType[MAX_NAME]; /* 字符串类型 */ /*课本166页无向图的邻接多重表存储表示 */ #define MAX_VERTEX_NUM 30
//最大顶点30 typedef enum{unvisited,visited}VisitIf;
typedef struct EBox
/*边集*/ {
/* 访问标记 */
/* 该边依附的两个顶点的位置 */
struct EBox *ilink,*
/* 分别指向依附这两个顶点的下一条边 */
InfoType *
/* 该边信息指针,可指向权值或其他信息 */ }EB
typedef struct
/*顶点集*/ {
/* 指向第一条依附该顶点的边 */ }VexB
typedef struct
VexBox adjmulist[MAX_VERTEX_NUM];
int vexnum,
/* 无向图的当前顶点数和边数 */ }AMLG typedef struct QNode {
struct QNode * }QNode,*QueueP typedef struct {
QueuePtr front, /* 队头、队尾指针 */ }LinkQ int LocateVex(AMLGraph G,VertexType u) { /* 初始条件:无向图G存在,u和G中顶点有相同特征 */
/* 操作结果:若G中存在顶点u,则返回该顶点在无向图中位置;否则返回-1 */
for(i=0;i&G.++i)
if(strcmp(u,G.adjmulist[i].data)==0)
return -1; }void CreateGraph(AMLGraph *G) { /* 采用邻接多重表存储结构,构造无向图G */
int i,j,k;
VertexType va,
printf("请输入无向图的(顶点数,边数): ");
scanf("%d,%d",&(*G).vexnum,&(*G).edgenum);
printf("请输入%d个顶点的值(&%d个字符):\n",(*G).vexnum,MAX_NAME);
for(i=0;i&(*G).++i)
/* 构造顶点向量 */
scanf("%s",(*G).adjmulist[i].data);
(*G).adjmulist[i].firstedge=NULL;
printf("请顺序输入每条边的两个端点(以空格作为间隔):\n");
for(k=0;k&(*G).++k)
/* 构造表结点链表 */
scanf("%s%s%*c",va,vb);
/* %*c吃掉回车符 */
i=LocateVex(*G,va);
/* 一端 */
j=LocateVex(*G,vb);
/* 另一端 */
p=(EBox*)malloc(sizeof(EBox));
/* 设初值 */
p-&ivex=i;
p-&ilink=(*G).adjmulist[i]. /* 插在表头 */
(*G).adjmulist[i].firstedge=p;
p-&jvex=j;
p-&jlink=(*G).adjmulist[j]. /* 插在表头 */
(*G).adjmulist[j].firstedge=p;
莱茵教育ui设计培训,专业UI培训9年.UI设计大咖必学.名师亲授免费试学全名师授课,500强企业标准软件 界面设计课程,206个国际大型设计案例项目.先就业再付款.
}}int FirstAdjVex(AMLGraph G,VertexType v) { /* 初始条件:无向图G存在,v是G中某个顶点 */
/* 操作结果:返回v的第一个邻接顶点的序号。若顶点在G中没有邻接顶点,则返回-1 */
i=LocateVex(G,v);
if(i&0) /* G中不存在顶点v */
return -1;
if(G.adjmulist[i].firstedge) /* v有邻接顶点 */
if(G.adjmulist[i].firstedge-&ivex==i)
return G.adjmulist[i].firstedge-&
return G.adjmulist[i].firstedge-&
return -1; }int NextAdjVex(AMLGraph G,VertexType v,VertexType w) { /* 初始条件:无向图G存在,v是G中某个顶点,w是v的邻接顶点 */
/* 操作结果:返回v的(相对于w的)下一个邻接顶点的序号。若w是v的最后一个邻接点,则返回-1 */
i=LocateVex(G,v); /* i是顶点v的序号 */
j=LocateVex(G,w); /* j是顶点w的序号 */
if(i&0||j&0) /* v或w不是G的顶点 */
return -1;
p=G.adjmulist[i]. /* p指向顶点v的第1条边 */
if(p-&ivex==i&&p-&jvex!=j) /* 不是邻接顶点w(情况1) */
p=p-& /* 找下一个邻接顶点 */
else if(p-&jvex==i&&p-&ivex!=j) /* 不是邻接顶点w(情况2) */
p=p-& /* 找下一个邻接顶点 */
else /* 是邻接顶点w */
if(p&&p-&ivex==i&&p-&jvex==j) /* 找到邻接顶点w(情况1) */
if(p&&p-&ivex==i)
return p-&
else if(p&&p-&jvex==i)
return p-&
if(p&&p-&ivex==j&&p-&jvex==i) /* 找到邻接顶点w(情况2) */
if(p&&p-&ivex==i)
return p-&
else if(p&&p-&jvex==i)
return p-&
return -1; }Status PutVex(AMLGraph *G,VertexType v,VertexType value) { /* v赋新值value */
i=LocateVex(*G,v);
if(i&0) /* v不是G的顶点 */
return ERROR;
strcpy((*G).adjmulist[i].data,value);
return OK; }Status InsertVex(AMLGraph *G,VertexType v) { /* 初始条件:无向图G存在,v和G中顶点有相同特征 */
/* 操作结果:在G中增添新顶点v(不增添与顶点相关的弧,留待InsertArc()去做) */
if((*G).vexnum==MAX_VERTEX_NUM) /* 结点已满,不能插入 */
return ERROR;
if(LocateVex(*G,v)&=0) /* 结点已存在,不能插入 */
return ERROR;
strcpy((*G).adjmulist[(*G).vexnum].data,v);
(*G).adjmulist[(*G).vexnum++].firstedge=NULL;
return OK; }Status InsertArc(AMLGraph *G,VertexType v,VertexType w) { /* 初始条件:无向图G存在,v和W是G中两个顶点。操作结果:在G中增添弧&v,w& */
i=LocateVex(*G,v); /* 一端 */
j=LocateVex(*G,w); /* 另一端 */
if(i&0||j&0||i==j)
return ERROR;
p=(EBox*)malloc(sizeof(EBox));
p-&ivex=i;
p-&ilink=(*G).adjmulist[i]. /* 插在表头 */
(*G).adjmulist[i].firstedge=p;
p-&jvex=j;
p-&jlink=(*G).adjmulist[j]. /* 插在表头 */
(*G).adjmulist[j].firstedge=p;
(*G).edgenum++;
return OK; }Status DeleteArc(AMLGraph *G,VertexType v,VertexType w) { /* 初始条件:无向图G存在,v和w是G中两个顶点。操作结果:在G中删除弧&v,w& */
EBox *p,*q;
i=LocateVex(*G,v);
j=LocateVex(*G,w);
if(i&0||j&0||i==j)
return ERROR;
/* 图中没有该点或弧。以下使指向待删除边的第1个指针绕过这条边 */
p=(*G).adjmulist[i]. /* p指向顶点v的第1条边 */
if(p&&p-&jvex==j) /* 第1条边即为待删除边(情况1) */
(*G).adjmulist[i].firstedge=p-&
else if(p&&p-&ivex==j) /* 第1条边即为待删除边(情况2) */
(*G).adjmulist[i].firstedge=p-&
else /* 第1条边不是待删除边 */
while(p) /* 向后查找弧&v,w& */
if(p-&ivex==i&&p-&jvex!=j) /* 不是待删除边 */
p=p-& /* 找下一个邻接顶点 */
else if(p-&jvex==i&&p-&ivex!=j) /* 不是待删除边 */
p=p-& /* 找下一个邻接顶点 */
else /* 是邻接顶点w */
if(!p) /* 没找到该边 */
return ERROR;
if(p-&ivex==i&&p-&jvex==j) /* 找到弧&v,w&(情况1) */
if(q-&ivex==i)
q-&ilink=p-&
q-&jlink=p-&
else if(p-&ivex==j&&p-&jvex==i) /* 找到弧&v,w&(情况2) */
if(q-&ivex==i)
q-&ilink=p-&
q-&jlink=p-&
} /* 以下由另一顶点起找待删除边且删除之 */
p=(*G).adjmulist[j]. /* p指向顶点w的第1条边 */
if(p-&jvex==i) /* 第1条边即为待删除边(情况1) */
(*G).adjmulist[j].firstedge=p-&
else if(p-&ivex==i) /* 第1条边即为待删除边(情况2) */
(*G).adjmulist[j].firstedge=p-&
else /* 第1条边不是待删除边 */
while(p) /* 向后查找弧&v,w& */
if(p-&ivex==j&&p-&jvex!=i) /* 不是待删除边 */
p=p-& /* 找下一个邻接顶点 */
else if(p-&jvex==j&&p-&ivex!=i) /* 不是待删除边 */
p=p-& /* 找下一个邻接顶点 */
else /* 是邻接顶点v */
if(p-&ivex==i&&p-&jvex==j) /* 找到弧&v,w&(情况1) */
if(q-&ivex==j)
q-&ilink=p-&
q-&jlink=p-&
else if(p-&ivex==j&&p-&jvex==i) /* 找到弧&v,w&(情况2) */
if(q-&ivex==j)
q-&ilink=p-&
q-&jlink=p-&
free(p); /* 释放结点 */
(*G).edgenum--; /* 边数-1 */
return OK; }Status DeleteVex(AMLGraph *G,VertexType v)
{ /* 初始条件:无向图G存在,v是G中某个顶点。操作结果:删除G中顶点v及其相关的边 */
i=LocateVex(*G,v); /* i为待删除顶点的序号 */
return ERROR;
for(j=0;j&(*G).j++) /* 删除与顶点v相连的边(如果有的话) */
DeleteArc(G,v,(*G).adjmulist[j].data); /* 如果存在此弧,则删除 */
for(j=i+1;j&(*G).j++) /* 排在顶点v后面的顶点的序号减1 */
(*G).adjmulist[j-1]=(*G).adjmulist[j];
(*G).vexnum--; /* 顶点数减1 */
for(j=i;j&(*G).j++) /* 修改序号大于i的顶点在表结点中的序号 */
p=(*G).adjmulist[j].
if(p-&ivex==j+1)
p-&ivex--;
p-&jvex--;
return OK; } void visit(VertexType v) {
printf("%s ",v); }//以下课本169页算法Boolean visite[MAX_VERTEX_NUM];
/* 访问标志数组(全局量) */void(*VisitFunc)(VertexType v); void DFS(AMLGraph G,int v) {
VisitFunc(G.adjmulist[v].data);
visite[v]=TRUE;
p=G.adjmulist[v].
j=p-&ivex==v?p-&jvex:p-&
if(!visite[j])
p=p-&ivex==v?p-&ilink:p-&
} }void DFSTraverse(AMLGraph G,void(*visit)(VertexType)) { /* 初始条件:图G存在,Visit是顶点的应用函数。算法7.4 */
/* 操作结果:从第1个顶点起,深度优先遍历图G,并对每个顶点调用函数Visit一次且仅一次 */
char t[20];
VisitFunc=
for(v=0;v&G.v++)
visite[v]=FALSE;
printf("深度优先起点:");
scanf("%s",t);
j=LocateVex(G,t);
//第一个访问的节点
printf("结果:");
for(v=j;v&G.v++)
if(!visite[v])
printf("\n"); }Status QueueEmpty(LinkQueue Q) { /* 若Q为空队列,则返回TRUE,否则返回FALSE */
if(Q.front-&next==NULL)
return TRUE;
return FALSE; }void EnQueue(LinkQueue *Q,QElemType e) { /* 插入元素e为Q的新的队尾元素 */
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) /* 存储分配失败 */
exit(ERROR);
p-&data=e;
p-&next=NULL;
(*Q).rear-&next=p;
(*Q).rear=p; }Status DeQueue(LinkQueue *Q,QElemType *e) { /* 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR */
if((*Q).front==(*Q).rear)
return ERROR;
p=(*Q).front-&
(*Q).front-&next=p-&
if((*Q).rear==p)
(*Q).rear=(*Q).
return OK; }void InitQueue(LinkQueue *Q) { /* 构造一个空队列Q */
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
if(!(*Q).front)
exit(ERROR);
(*Q).front-&next=NULL; }void BFSTraverse(AMLGraph G,void(*Visit)(VertexType))
{ /* 初始条件:图G存在,Visit是顶点的应用函数。算法7.6 */
/* 操作结果:从第1个顶点起,按广度优先非递归遍历图G,并对每个顶点调用函数 */
Visit一次且仅一次。使用辅助队列Q和访问标志数组visite */
int v,u,w,j;
char t[20];
LinkQueue Q;
for(v=0;v&G.v++)
visite[v]=FALSE; /* 置初值 */
InitQueue(&Q); /* 置空的辅助队列Q */
printf("广度优先起点:");
scanf("%s",t);
j=LocateVex(G,t);
//第一个访问的节点
printf("结果:");
for(v=j;v&G.v++)
if(!visite[v]) /* v尚未访问 */
visite[v]=TRUE; /* 设置访问标志为TRUE(已访问) */
Visit(G.adjmulist[v].data);
EnQueue(&Q,v); /* v入队列 */
while(!QueueEmpty(Q)) /* 队列不空 */
DeQueue(&Q,&u); /* 队头元素出队并置为u */
for(w=FirstAdjVex(G,G.adjmulist[u].data);w&=0;w=NextAdjVex(G,G.adjmulist[u].data,G.adjmulist[w].data))
if(!visite[w]) /* w为u的尚未访问的邻接顶点的序号 */
visite[w]=TRUE;
Visit(G.adjmulist[w].data);
EnQueue(&Q,w);
printf("\n"); }void MarkUnvizited(AMLGraph G) { /* 置边的访问标记为未被访问 */
for(i=0;i&G.i++)
p=G.adjmulist[i].
if(p-&ivex==i)
} }void Display(AMLGraph G) { /* 输出无向图的邻接多重表G */
MarkUnvizited(G); /* 置边的访问标记为未被访问 */
printf("有%d个顶点:\n",G.vexnum);
for(i=0;i&G.++i)
printf("%s\n",G.adjmulist[i].data);
printf("\n有%d条边:\n",G.edgenum);
for(i=0;i&G.i++)
p=G.adjmulist[i].
if(p-&ivex==i) /* 边的i端与该顶点有关 */
if(!p-&mark) /* 只输出一次 */
printf("%s-%s
\n",G.adjmulist[i].data,G.adjmulist[p-&jvex].data);
else /* 边的j端与该顶点有关 */
if(!p-&mark) /* 只输出一次 */
printf("%s-%s
\n",G.adjmulist[p-&ivex].data,G.adjmulist[i].data);
} }/*菜单函数,函数返回值为整数,代表所选的菜单项*/int menu_select(){
printf("按任意键进入菜单选项......\n");
/*提示按任意键继续*/
getch(); /*读入任意字符*/
system("cls"); /*清屏*/
printf("\n
|*********************菜单**************************|\n");
|No0. 创建图
|No1. 打印关系图
|No2. 深度优先搜索
|No3. 广度优先搜索
|No4. 修改顶点的值
|No5. 插入新顶点
|No6. 删除一条边
|No7. 删除顶点及相关的边
|No8.深度优先遍历生成树及边打印
|No9. 程序结束
|****************************************************|\n");
printf("\n
请选择(No0---No10):");
/*提示输入选项*/
scanf("%d",&c);
}while(c&0||c&10);
/*选择项不在0~10之间重输*/
/*返回选择项*/}/******主函数开始*******/void main(){ int k,n; AMLG VertexType v1,v2;
system("cls") ; /*清屏*/
王洋课程设计 二\n\n
printf("本程序实现图的遍历演示。\n\n");
for(;;)/*一直循环下去*/
switch(menu_select())
/*调用主菜单函数,返回值整数作开关语句的条件*/
case 0:CreateGraph(&g);
/*输入记录*/
case 1:Display(g);
/*显示全部记录*/
case 2:printf("采用深度优先搜索的方法\n");
DFSTraverse(g,visit);
case 3:printf("采用广度优先搜索的方法:\n");
BFSTraverse(g,visit);;
/*广度优先搜索*/
case 4:printf("修改顶点的值,请输入原值 新值: ");
scanf("%s%s",v1,v2);
//修改顶点的值
PutVex(&g,v1,v2);;
/*插入记录*/
case 5:printf("插入新顶点,请输入顶点的值: ");
scanf("%s",v1);
InsertVex(&g,v1);
printf("插入与新顶点有关的边,请输入边数: ");
scanf("%d",&n);
for(k=0;k&n;k++)
printf("请输入另一顶点的值: ");
scanf("%s",v2);
InsertArc(&g,v1,v2);
/*显示即将过期的送货单*/
case 6:printf("删除一条边,请输入待删除边的两顶点(以空格作为间隔):");
scanf("%s%s",v1,v2);
DeleteArc(&g,v1,v2);
/*删除边*/
case 7:printf("删除顶点及相关的边,请输入顶点的值: ");
scanf("%s",v1);
DeleteVex(&g,v1);
/*删除结点*/
case 8:exit(0);
/*如返回值为10则程序结束*/
弄好久也不会啊。。。
~~~亲爱的好厉害
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或请完成以下验证码
人气值3312
我的设计意向是,&&改造成 适合简单的三口之家 或追求生活品质的无孩夫妇,可能是自由职业, 在家需要自己的工作空间。
(51.83 KB, 下载次数: 4)
22:27 上传
全部评论: 12条
签到天数: 18 天[LV.4]偶尔看看III
而且我觉得厕所太小,能往左扩宽加个淋浴房吗?
签到天数: 737 天[LV.9]以坛为家II
自由设计师,QQ:,希望能和您取得联系,能为您服务
签到天数: 655 天[LV.9]以坛为家II
您好!& && && &
我是上海的设计师,从事装饰设计行业多年,装修设计过独栋别墅、联排别墅、错层、公寓房等,有着丰富的设计及软装搭配经验。望有荣幸参加贵宅的设计,我叫邹文,叫我小邹就可以了,希望有机会合作。& && && &
如有意向咨询我&&QQ:
签到天数: 63 天[LV.6]常住居民II
卫生间足够大了,完全可以配备淋雨,马桶,洗手台;厨房完全可以小一些,为本来就小的餐厅让些空间
签到天数: 74 天[LV.6]常住居民II
可以联系QQ: ,详细谈一下你的要求
该用户从未签到
YP41.jpeg (308.81 KB, 下载次数: 58)
13:43 上传
签到天数: 28 天[LV.4]偶尔看看III
需要设计可联系 QQ:
签到天数: 36 天[LV.5]常住居民I
厨房减小空间 跟阳台打通来使用,餐厅空间自然加大,办公的位置就可以打书柜书桌一体在进门处的长廊边上,客厅保持以前的位置。我不是高手,个人意见仅供参考。
签到天数: 39 天[LV.5]常住居民I
你没觉得;你那样设计;没一点的私密性吗;我觉得你完全可以把餐厅那一小块做过弧形的抬升;然后把厨房和通往客厅那个过道做个栅格式的推拉门
这样可以确保客厅的一点点私密性
精品推荐 /1
两个半月,系统带来操作软装从方案到后期的全过程实操内容。
即将涨价到2200元,目前报名依然1500元!
官方新浪微博
官方腾讯微博
COPYRIGHT&& &中国室内设计联盟 ALL RIGHTS RESERVED.