回路C语言
⑴ 如何用c语言或c++判断是否是欧拉回路
一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图
一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图
可以用邻接矩阵或者邻接表,做一次DFS或者BFS访问各个节点判断入度出度就行
⑵ C语言 克鲁斯卡尔算法怎么判断是否构造成回路求大手解答
使用并查集,每个讲克鲁斯卡尔的算法都会涉及并查集。
初始为每个顶点属于互不相同的集合,当添加一条边时,就把这两条边的顶点加入到同一集合。如果边的两顶点属于不同集合,就可以添加这条边,否则就不可以添加(会构成回路)。
对于集合的操作,有子集的划分。前几天的天津还是哪个regional网络预赛,就有个子集划分的题目。
⑶ 三相桥式全控整流电路c语言程序
三相桥式全控整流电路
应用最为广泛,共阴极组——阴极连接在一起的3个晶闸管(VT1,VT3,VT5)共阳极组——阳极连接在一起的3个晶闸管(VT4,VT6,VT2)
编号:1、3、5,4、6、2
a 带电阻负载时的工作情况
a =0°时的情况
假设将电路中的晶闸管换作二极管进行分析对于共阴极阻的3个晶闸管,阳极所接交流电压值最大的一个导通对于共阳极组的3个晶闸管,阴极所接交流电压值最低(或者说负得最多)的导通
任意时刻共阳极组和共阴极组中各有1个晶闸管处于导通状态
从相电压波形看,共阴极组晶闸管导通时,ud1为相电压的正包络线,共阳极组导通时,ud2为相电压的负包络线,ud=ud1 - ud2是两者的差值,为线电压在正半周的包络线直接从线电压波形看, ud为线电压中最大的一个,因此ud波形为线电压的包络线。
三相桥式全控整流电路的特点:
(1)2管同时通形成供电回路,其中共阴极组和共阳极组各1,且不能为同1相器件。
(2)对触发脉冲的要求:
按VT1-VT2-VT3-VT4-VT5-VT6的顺序,相位依次差60°。
共阴极组VT1、VT3、VT5的脉冲依次差120°,共阳极组VT4、VT6、VT2也依次差120°同一相的上下两个桥臂,即VT1与VT4,VT3与VT6,VT5与VT2,脉冲相差180°。
表2-1 三相桥式全控整流电路电阻负载a=0°时晶闸管工作情况
时 段 I II III IV V VI
共阴极组中导通的晶闸管 VT1 VT1 VT3 VT3 VT5 VT5
共阳极组中导通的晶闸管 VT6 VT2 VT2 VT4 VT4 VT6
整流输出电压Ud Ua-Ub=Uab Ua-Uc=Uac Ub-Uc=Ubc Ub-Ua=Uba Uc-Ua=Uca Uc-Ub=Ucb
(3)ud一周期脉动6次,每次脉动的波形都一样,故该电路为6脉波整流电路。
(4)需保证同时导通的2个晶闸管均有脉冲可采用两种方法:一种是宽脉冲触发另一种方法是双脉冲触发(常用)。
(5)晶闸管承受的电压波形与三相半波时相同,晶闸管承受最大正、反向电压的关系也相同 a=30°时的工作情况从wt1开始把一周期等分为6段,ud波形仍由6段线电压构成,每一段导通晶闸管的编号等仍符合表2-1的规律区别在于:晶闸管起始导通时刻推迟了30°,组成ud的每一段线电压因此推迟30°变压器二次侧电流ia波形的特点:在VT1处于通态的120°期间,ia为正,ia波形的形状与同时段的ud波形相同,在VT4处于通态的120°期间,ia波形的形状也与同时段的ud波形相同,但为负值。a=60°时工作情况ud波形中每段线电压的波形继续后移,ud平均值继续降低。a=60°时ud出现为零的点。
⑷ 用C语言画一简单电路图
void cb_line(int x1,int y1,int x2,int y2) /*draw a line*/
{
int dx,dy,n,k,i,f;
int x,y;
dx=abs(x2-x1);
dy=abs(y2-y1);
n=dx+dy;
if(x2>=x1)
{
k=y2>=y1?1:4;
x=x1;
y=y1; /* k stands for the slope of line*/
}
else
{
k=y2>=y1?2:4;
x=x1;
y=y1;
}
for(i=0,f=0;i<n;i++)
if(f>=0)
switch(k)
{
case 1:putpixel(x++,y,3);f-=dy;break;
case 2:putpixel(x,y++,3);f-=dx;break;
case 3:putpixel(x--,y,3);f-=dy;break;
case 4:putpixel(x,y--,3);f-=dx;break;
}
else
switch(k)
{
case 1:putpixel(x,y++,3);f+=dx;break;
case 2:putpixel(x--,y,3);f+=dy;break;
case 3:putpixel(x,y--,3);f+=dx;break;
case 4:putpixel(x++,y,3);f+=dy;break;
}
}
⑸ C语言找出费用最低的回路
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#defineSIZE6
structNode
{
intr[SIZE];
structNode*next;
}head={{0},NULL},*current=&head;
voidswap(int*a,int*b)
{
intt=*a;
*a=*b;
*b=t;
}
voidarrange(intm,intn,int*data)
{
//outputafullarrange
if(m==n)
{
structNode*node=(structNode*)malloc(sizeof(structNode));
memcpy(node->r,data,SIZE*sizeof(int));
current->next=node;
current=node;
}
else
{
inti;
for(i=m;i<=n;i++)
{
swap(&data[m],&data[i]);
arrange(m+1,n,data);
swap(&data[m],&data[i]);
}
}
}
intmain()
{
constintcost[5][5]={ {0,10,2,9,11},
{10,0,8,11,6},
{2,8,0,3,8},
{9,11,3,0,9},
{11,6,8,9,0}
};
intmap[SIZE]={0,1,2,3,4,0},min_cost=1000,*minp;
arrange(1,4,map);
structNode*p;
for(p=head.next;p;p=p->next){
inti,sum=0;
for(i=0;i<SIZE-1;i++)
sum+=cost[p->r[i]][p->r[i+1]];
if(sum<min_cost){
min_cost=sum;
minp=p->r;
}
}
inti;
printf("Mincostroad:");
for(i=0;i<SIZE;i++)
printf("%c",minp[i]+'A');
printf("cost:%d ",min_cost);
return0;
}
⑹ 求大神回答,用C语言实现离散数学中的Fleury算法,最后结果要求1、判断是否为欧拉图;2、输出欧拉回路
#include "SqStack.h" //
堆栈的常见操作
#include "Queue.h"//
队列的常见操作
typedef int Graph[200][200];
int v,e;
void DFS(Graph &G
,SqStack &S,int x,int t)
{
int k=0,i,m,a;
Push(S,x);
for(i=t;i<v;i++)
if(G[i][x]>0)
{
k=1;
G[i][x]=0; //
删除此边
G[x][i]=0;
DFS(G
,S,i,0);
break;
}//if,for
if(k==0)
{
Pop(S);
GetTop(S,m);
G[x][m]=1;
G[m][x]=1;
a=x+1;
if(StackLength(S)!=e)
{
Pop(S);
DFS(G
,S,m,a);
}//if
else
Push(S,x);
}//if
}//DFS
int BFSTest(Graph G)
{
int a[200],x,i,k=0;
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,0);
for(i=0;i<v;i++)
a[i]=0;
a[0]=1;
while(!QueueEmpty(Q))
{
DeQueue(Q,x);
for(i=0;i<v;i++)
if(G[x][i]>0)
if(a[i]!=1)
{
a[i]=1;
EnQueue(Q,i);
}//if
}//while
for(i=0;i<v;i++)
if(a[i]==0)
{
k=1;
break;
}
if(k==1)
return 0;
else
return 1;
}
void Euler(Graph &G
,int x)
{
int m;
SqStack S;
InitStack(S);
DFS(G
,S,x,0);
printf("
该图的一个欧拉回路为:
");
while(!StackEmpty(S))
{
GetTop(S,m);
printf("->v%d",m);
Pop(S);
}//while
}
void InputM1(Graph &G)
{
int h,z;
printf("Please input
顶点数和边数
\n");
scanf("%d",&v);
scanf("%d",&e);
for(int i=0;i<v;i++)
for(int j=0;j<v;j++)
G[i][j]=0;
printf("please int the
邻接矩阵的值
(
起点
(
数字
)
终点
(
数字
))
:
\n");
for(int i=0;i<e;i++)
{
scanf("%d",&h);
scanf("%d",&z);
G[h-1][z-1]=1;
G[z-1][h-1]=1;
}//for
}//InputM1
int main()
{
int i,j,sum,k=0;
Graph G;
InputM1(G);
if(BFSTest(G)==0)
{
printf("
该图不是连通图
!\n");
exit(0);
}//if
for(i=0;i<v;i++)
{
sum=0;
for(j=0;j<v;j++)
sum+=G[i][j];
if(sum%2==1)
{
k=1;
break;
}//if
}//for
if(k==1) printf("
该图不存在欧拉回路!
\n");
else
Euler(G,0);
return 1;
}
⑺ 如何用c语言设计电路板程序
如何用C语言设计电路板程序,就好像怎么用筷子吃菜一样。C语言只是一种语言,是一种工具,根据您电路板需要实现的功能,去编写对应的程序。建议实际做些小电路板,边玩边编程,这样应用起来更得心应手和进步快些。
⑻ 图中找回路 C语言编程 跪求大神帮助 高分悬赏 采纳 追加分数
简单提示:
(1)可以用矩阵表示图
(2)用深入优先(DFS)从任 一顶点v0开始搜索,在搜索过程中标记访问过的顶点和边,如果有某个顶点未访问,且该顶点有一条边与v0相连,即找到一条回路。
伪码差不多是这个样子吧。
int DFS(Graph G,int vj)
{
visited[vj]=TRUE;
for(vj所有邻接点vi)
{
if(visited[vi]=FALSE)
{
if(Edge[vj][vi]==FALSE && vi是初始顶点v0)
{
显示一条回路,退出
}
DFS(G,vi);
Edge[v0][vi]=TRUE;
}
}
}
⑼ 任务:对于给定的n个点和连接这n个点的m条边,用C语言编程计算一笔画回路.
题目很简单,从算法上说,你只要判断每个点与其它的点连接的边数为偶数就可以了,如果满足这个条件,从任意点出发都可以,如果不满足,则不存在一笔画回路
算法如此,代码自己写了
相关数学理论,请google 七桥问题
⑽ 怎样编写求一个有向图所有回路的C语言源程序
大体思路吧,做一个标记,遇到/*做一个标记(因为C语言只有/**/注释,如果是C++的话//也是注释),此标记为真时不向另一个文件中写入,遇到*/时标记为假,则断续写入就OK了