欢迎来到天天文库
浏览记录
ID:38699161
大小:18.30 KB
页数:15页
时间:2019-06-17
《C++下行法实现故障树》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#includeusingnamespacestd;typedefstructCTBox{inttype;//0-与;1-或;2-叶子节点;3-根节点intchild;stringdata;CTBox*Next;//孩子链表头指针}CTBox,*pCTBox;typedefstruct{CTBoxnodes[100];intn,r;//结点数,叶子节点数}Tree;boolequal(char*test,char*temp);//函数原型boolnoleaf(Treefta,intpos);//识
2、别非叶子节点intfindFTA(Treefta,char*temp);//匹配字符对应节点在向量中的序号intfindFTAstr(Treefta,stringstr);//匹配str对应节点的向量序号intfindRoot(Treefta,stringtable[100][100],intj);//寻找第一个非叶子节点,-2-没有,-1-空表,0,1,2-有intMoveRootStr(Treefta,stringtable[100][100],inti,intj);//把分支节点移到开头intCountFlag(stringtable[100][100],inti,intj
3、);//计算*个数voidOutPut(stringtable[100][100],intj);//输出割集boolIfHasRoot(Treefta,stringtable[100][100],inti,intj);voidmain(){cout<<"************************************************";cout<<"
4、故障树程序
5、";cout<<"
6、王涛201105017009
7、";cout<<"
8、下行法求最小割集
9、";cout<<"*****************************************
10、*******";inti=0,j=0,k=0,l=0,count=0;//循环变量Treefta;cout<<"inputthenumberofnodes(n)andleaves(r):[n-r=numberofstatements]";cin>>fta.n>>fta.r;//输入节点数cout<<"inputthestatements:";charinput[100];chartemp[50];introot=0;//建树到哪了for(i=0;i>input;intlen=0;//计算input的长度f
11、or(len=0;;len++)if(input[len]==' ')break;inttemk;for(k=0;input[k]!='=';k++){temp[k]=input[k];}temp[k]=' ';if(count==0)//第一句付给根{fta.nodes[0].data.assign(temp);count++;}root=findFTA(fta,temp);//给哪个节点连接子节点for(l=0;l12、nodes[root].type=1;break;}}intsum=0;CTBox*temchild,*pre;pre=&(fta.nodes[root]);while(input[k]!=' '){k++;//g1='g'2+g3temk=k;for(k=k;input[k]!='+'&&input[k]!='*'&&input[k]!=' ';k++){temp[k-temk]=input[k];sum++;}temp[k-temk]=' ';fta.nodes[count].data.assign(temp);count++;//指向向量的游标,beginwith0t13、emchild=newCTBox;//不能直接CTBoxtemchild否则它只新建temchild一次temchild->child=count-1;temchild->Next=NULL;if(sum==1){pre->Next=temchild;pre=temchild;}else{pre->Next=temchild;pre=temchild;}}}//endof建立故障树for(j=0;j
12、nodes[root].type=1;break;}}intsum=0;CTBox*temchild,*pre;pre=&(fta.nodes[root]);while(input[k]!=' '){k++;//g1='g'2+g3temk=k;for(k=k;input[k]!='+'&&input[k]!='*'&&input[k]!=' ';k++){temp[k-temk]=input[k];sum++;}temp[k-temk]=' ';fta.nodes[count].data.assign(temp);count++;//指向向量的游标,beginwith0t
13、emchild=newCTBox;//不能直接CTBoxtemchild否则它只新建temchild一次temchild->child=count-1;temchild->Next=NULL;if(sum==1){pre->Next=temchild;pre=temchild;}else{pre->Next=temchild;pre=temchild;}}}//endof建立故障树for(j=0;j
此文档下载收益归作者所有