请高人您的帮忙!!交通灯编程问题,有具体要求。着急!!!!

作者&投稿:干雄 (若有异议请与网页底部的电邮联系)
~

一、      设计任务考虑一个多叉路口,如作图所示,在这个路口中,共有五条道路相交,其中C和E是单行线,其他为双行线。提出的任务是:为这个路口设计一个安全有效的交通灯管理系统。

 

 

 

 

二、      问题分析

首先需要分析一下所有车辆的行驶路线的冲突问题。这个问题可以归结为对车辆的可能行驶方向作某种分组,对分组的要求是使任一个组中各个方向行驶的车辆可以同时安全行驶而不发生碰撞。根据这个路口的实际情况可以确定13个可能通行方向:A→B,A→C,A→D, B→A,B→C,B→D, D→A,D→B,D→C, E→A,E→B,E→C, E→D。

为了叙述方便,我们下面把A→B简写成AB,并且用一个小椭圆把它框起来,在不能同时行驶的路线间画一条连线(表示它们互相冲突),便可以得到图所示的图式。

这样做就把要解决的问题借助图的模型变成了另一个抽象问题:要求将图1.2中的结点分组,使有线相连(互相冲突)的结点不在同一个组里。如果把上图中的一个结点理解为一个国家,结点之间的连线看作两国有共同边界,上述问题就变成著名的“着色问题”:即求出要几种颜色可将图中所有国家着色,使得任意两个相邻的国家颜色都不相同。通过上面的分析,我们就获得了该交通管系统的数学模型,这样就可以用转变为计算机可以解决的问题了。

 

三、      算法和数据结构的设计

图的结构体包含成员:顶点、边、顶点个数

顶点也是一个结构体,包含成员:名字、所涂颜色

typedef struct //顶点结构

{

char name[30]; //名字

   int color;//所涂颜色

}VexType;

typedef struct//图的结构

{

   VexType dingdian[MAX]; //顶点信息

   AdjType bian[MAX][MAX];//边信息

   int n;//图的顶点个数

}GraphMatrix;

四、      程序的实现

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define MAX 100

typedef struct //顶点结构

{

   char name[30]; //名字

   int color;//所涂颜色

}VexType;

typedef int AdjType;

typedef struct

{

   VexType dingdian[MAX]; //顶点信息

   AdjType bian[MAX][MAX];//边信息

   int n;//图的顶点个数

}GraphMatrix;

 

int empty(GraphMatrix * pG)//判断集合V1是否为空

{

   int i;

   for(i=0;i<pG->n;i++)

      if(pG->dingdian[i].color==0)

         return 0;

   return 1;

}

int buxianglin(GraphMatrix * pG,int index,int color)//判断第index个顶点是否与集合NEW中每个顶点不相邻

{

   int i;

   for(i=0;i<pG->n;i++)

   {

      if(pG->dingdian[i].color!=color)//第i个顶点不在NEW中

         continue;

      if(pG->bian[index][i]==1)//第index个顶点与第i个顶点(在集合NEW中)相邻

         return 0;

   }

   return 1;//执行至此,说明第index个顶点与集合NEW中每个顶点都不相邻

}

 

int colorup(GraphMatrix * pG)//用贪心法给图*pG染色,并返回颜色数目

//逻辑上认为有一个集合V1,图*pG的任一顶点v属于V1当且仅当v.color等于0

//逻辑上认为有一个集合NEW,图*pG的任一顶点v属于NEW当且仅当v.color等于当前color

{

   int color=0,i;

   while(!empty(pG))//当集合V1不空时

   {

      color++;

      for(i=0;i<pG->n;i++)

      {

         if(pG->dingdian[i].color!=0)//第i个顶点不属于V1

            continue;

         if(buxianglin(pG,i,color))//第i个顶点与集合NEW中每个顶点不相邻

            pG->dingdian[i].color=color;//将第i个顶点加入NEW中

      }

   }

   return color;

}

 

void Output(GraphMatrix * pG)

{

   int i,j;

   printf("Result
certex color
");

   for(i=0;i<pG->n;i++)

   {

      printf("%6s,%5d",pG->dingdian[i].name,pG->dingdian[i].color);

      putchar('
');

   }

   printf("The relation of all the borders");

   putchar('
');

   for(i=0;i<pG->n;i++)

   {

      for(j=0;j<pG->n;j++)

         printf("%2d",pG->bian[i][j]);

      putchar('
');

   }

}

 

GraphMatrix *createaGraph()

{

   int i,j;

   GraphMatrix * pG=(GraphMatrix *)malloc(sizeof(GraphMatrix));

   pG->n=13;

   strcpy(pG->dingdian[0].name,"AB");

   strcpy(pG->dingdian[1].name,"AC");

   strcpy(pG->dingdian[2].name,"AD");

   strcpy(pG->dingdian[3].name,"BA");

   strcpy(pG->dingdian[4].name,"BC");

   strcpy(pG->dingdian[5].name,"BD");

   strcpy(pG->dingdian[6].name,"DA");

   strcpy(pG->dingdian[7].name,"DB");

   strcpy(pG->dingdian[8].name,"DC");

   strcpy(pG->dingdian[9].name,"EA");

   strcpy(pG->dingdian[10].name,"EB");

   strcpy(pG->dingdian[11].name,"EC");

   strcpy(pG->dingdian[12].name,"ED");

   for(i=0;i<pG->n;i++)

   {

      pG->dingdian[i].color=0;

      for(j=0;j<pG->n;j++)

         pG->bian[i][j]=0;

   }

   pG->bian[0][4]=pG->bian[0][5]=pG->bian[0][6]=pG->bian[0][9]=pG->bian[1][5]=pG->bian[1][6]=pG->bian[1][7]=pG->bian[1][9]=pG->bian[1][10]=pG->bian[2][9]=pG->bian[2][10]=pG->bian[2][11]=pG->bian[4][0]=pG->bian[4][7]=pG->bian[4][10]=pG->bian[5][0]=pG->bian[5][1]=pG->bian[5][6]=pG->bian[5][10]=pG->bian[5][11]=pG->bian[6][0]=pG->bian[6][1]=pG->bian[6][5]=pG->bian[6][10]=pG->bian[6][11]=pG->bian[7][1]=pG->bian[7][4]=pG->bian[7][11]=pG->bian[9][0]=pG->bian[9][1]=pG->bian[9][2]=pG->bian[10][1]=pG->bian[10][2]=pG->bian[10][4]=pG->bian[10][5]=pG->bian[10][6]=pG->bian[11][2]=pG->bian[11][5]=pG->bian[11][6]=pG->bian[11][7]=1;

   return pG;

}

 

void main()

{

   GraphMatrix * pG=createaGraph();

   int color=colorup(pG);

   printf("Used %d color.
",color);

   Output(pG);

   free(pG);

}

五、      程序的调试与计算的结果分析

 

 




请高人指点!
女,1985年12月28日中午12:30,以下是八字命盘,还请高人帮忙分析一下,语言麻烦通俗易懂些,谢谢阳历:1985年12月28日午时生性别:女性农历:1985年11月17日午时生虚岁:24岁时柱日柱月柱... 女,1985年12月28日中午12:30,以下是八字命盘,还请高人帮忙分析一下,语言麻烦通俗易懂些,谢谢阳历: 1985年 12月 28日 ...

1985年3月11日 早上10点左右 女性 请高人帮忙算一下
5、吉利楼层末位数为:1 6 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 12345A帮助 2008-10-22 · TA获得超过123万个赞 知道顶级答主 回答量:65.3万 采纳率:0% 帮助的人:59.2亿 我也去答题访问个人页 展开全部 3月11日生日书 性格分析 3月11日出生的人是个不断追求进步的个体,不...

高人帮忙看看这个八字
吉象:学业事业较易进步和成功,天赋较易发挥。爱情也较易产生和进展,易交桃花运。女性较易怀胎生育。凶象:聪明易被聪明误,产生矛盾,引起官司诉讼。外表光华内里平淡,防过度劳神而损身心;盲目追求爱情而有损名誉及事业。男女要防矛盾和婚变。2008年 2月 4日~2009年 2月 4日:花放随风情切切...

哪位高人帮忙推算下命理?
已赞过 已踩过< 你对这个回答的评价是? 评论 收起 更多回答(1) 其他类似问题 2008-05-14 哪位高人帮忙推算下命理 2009-05-16 有哪位高人能帮我推算一下生辰八字啊 1 2011-06-02 最近对八字算命有点兴趣 哪位高人能详细推算下 ??? 2010-11-19 那位高人帮忙算下命。 2008-05-10 哪位高人可以帮...

请高人帮忙看看我的,紫薇排盘。多谢了。
对自己无助力,但本人却为帮助兄弟而蒙受损失。2014年运势:您今年的基本运势走的是强烈好运,自己很能...冲劲等优点,再者,禄存、化禄等星曜相互作用,形成「双禄交驰」格局,更带有「慢条斯理、稳守谨慎」

城市轨道交通的问题求高人帮帮忙!!!1好人一生平安!!!
1、35KV或10KV 2、750V 3、准许列车越过红灯,以不超过20km\/h的速度进站,并随时做好停车准备 4、漏泄电缆 5、调度集中控制台 6、一般设在尽头线的终端,表示列车停车位置 7、单线客流量较大的站点 8、双线成对追踪平行运行图

请高人帮忙测生辰八字和起名
请高人帮忙测生辰八字和起名 2008年3月26号(农历2月19)上午9点25分女孩父亲姓张,83年生。母亲姓孙,83年生。以父起名。请高人帮帮忙!~我就这点分都给了请多给点选择吧,谢谢!... 2008年3月26号(农历2月19)上午9点25分女孩父亲姓张,83年生。母亲姓孙,83年生。以父起名。请高人帮帮忙!~我就这点分都...

请高人帮忙看紫薇命盘
您的命宫的走向,将与这些宫位所发展的事件息息相关。火星对照 会遇波折,或人事上的斗争。奔波劳碌难免。巨门化权对照 增加积极性,和掌权的欲望。个性会变的较为自主刚强些。言词有力,说话条理分明。能以口才展露其能力。太阴化科加会 增加才学素养。能因女贵人的帮助而得财。常有小额的偏财。禄存...

请高人帮忙分析下我的八字命盘,谢谢
请高人帮忙分析下我的八字命盘,谢谢 农历一九八二年四月十八日辰时偏印比劫日主偏财八字壬戌乙巳甲午戊辰支藏戊辛丁丙戊庚丁己戊乙癸偏财食神伤官偏财正官...父亲较有利,或容易交上女友,姻缘不错。凶象:易引起财产或金钱纠纷,意外破耗。财多伤母克妻,易发生感情破裂。六、 对你的忠言 喜神是水 趋吉避凶的...

烦请哪位高人帮忙算一下我的八字阴阳
快步保你过得去,慢行一步不安牢。断曰:求财到手,官事平常,目下不吉,交节自强。 【32岁流年:2018年戊戌 小运:壬寅】流年劫财主事,运行养之地。天干戊土喜神,地支戌土喜神。 ★流年运势:75分,实际运势:78分。 ★戌卯流年与年六合,流年与月柱天克地冲。 ★利于从事投机、冒险的商业经营,多靠朋友帮助,你就...

科尔沁右翼前旗15998833879: 单片机实验,交通灯程序如下,希望帮忙解答一下,如果老师问,具体该怎样回答为什么这样编程,谢谢 -
堵钓甲状: 程序很简单啊,就是定时,然后输出控制信号,估计是控制数码管显示吧,至于s[]数组里面的数的含义只有看到电路才能明白.定时器中断里面就干了一件事情,定时时间到了就改变显示内容.

科尔沁右翼前旗15998833879: c语言关于交通灯的问题 -
堵钓甲状: if(miao==1)满足条件后才判断if(miao==5)显然后面的都不会执行建议用switch

科尔沁右翼前旗15998833879: 单片机交通灯程序疑问 -
堵钓甲状: 单片机处理程序的时候,是单条指令执行的!若同时让灯和数码管亮的话,须使用定时器中断!让CPU在灯和数码管间来回的切换任务!切换的间隔差不多在100Ms左右,最佳的效果还是你自己测试一下为好!

科尔沁右翼前旗15998833879: 用plc200设计交通灯 程序我会 就是要求倒计时显示不会 希望高人指点 需要原理图还有倒计时的程序.谢谢. -
堵钓甲状: 这个倒计时的显示用一句命令就可以了啊.你查下手册,有一句肯定是可以吧一个数字按照8位,也就是Y0-Y7的方式输出的.那么你只要按照Y0-7的接线方式吧输出接好就OK了啊.倒计时直接用定时器就行,只要实事吧这个T(x)的数据move到你上面的转化数里就可以了

科尔沁右翼前旗15998833879: 我想用EDA做一个交通灯程序,但不知道怎么到开发板上运用,求高人指点!!! -
堵钓甲状: 大哥,你首先要知道开发板用的哪个公司的FPGA或CPLD,是Altera还是xilinx得,然后使用软件QUARTUS 或ISE写代码,最后联接烧录

科尔沁右翼前旗15998833879: 新学用C写单片机程序,编程实现交通灯红绿黄三灯交替延时亮灭,在用SBUF时遇到了问题. -
堵钓甲状: 从SBUF里面取出来的是字符的ASCII码,如果只是单纯的数字的话,你可以考虑通过ASCII码减去0x30得到十六进制.因为 0的 ASCII是0x30, 1的ASCII码是 0x31,这里要注意的是比如你传送的是12345,从SBUF取值的时候应该是要取5次的,5个字符对应的ASCII码.如果你需要扩大的话,就需要先把这5个字符转为对应的十进制数12345,并存储在一个变量中(方便进行运算). 至于C语言,自己去琢磨吧.多写写总是有好处的.

科尔沁右翼前旗15998833879: 我想问关于交通灯的问题 请问我这样的编程思想对吗?(我给东西走向的路灯编一个程序单独循环 红 绿 黄 给南北走向的路灯编一个程序循环 绿 黄 红)
堵钓甲状: 这样应该可以实现但这样不好可能稳定性很差,实际上东西和南北应该是相互制约的,也就是有互锁关系的,而不是各自独立的,以上是我个人的观点,不知道您同不同意.

科尔沁右翼前旗15998833879: 单片机交通灯的汇编程序设计 -
堵钓甲状: #include <reg52.h> sbit K0 = P2^0; sbit K1 = P2^1; sbit K2 = P2^2; sbit K3 = P2^3; void main( void ) { TMOD = (TMOD & 0x0f) | 0x50; TR1 = 1; T1 = 1; TL1 = 0; TH1 = 0; TMOD = (TMOD & 0xf0 ) | 0x02; TH0 = -100; TR0 = 1; ET0 = 1; EA = 1; while( 1 ...

科尔沁右翼前旗15998833879: 在西门子300软件里打开编程出现如图所示对话框,请高人帮忙看看该怎么设置?
堵钓甲状: 这个我会弄,你需要做如下步骤: 1.必须确定你找个程序是在什么语言下编辑的,例如:最初编程序的人后者后来修改的人用的是英语,那么你需要把你的windows语言改成英语,在控制面板里的区域与语言里边. 2. 然后这样可以顺利打开S7程序了,然后你需要选择你的项目属性,把可以在任何WINDOS语言中打开项目那个打上对钩,然后将项目保存. 3. 将你的WINDOWS系统语言转换回中文.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网