迴路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了