📄 subject_22716.htm
字号:
<p>
序号:22716 发表者:齐乐 发表日期:2002-11-28 08:53:25
<br>主题:用算法如何表示两点间被连接?如图
<br>内容: A B<BR>-1-----\ 1-<BR>-2 \ 2-<BR>-3 \ 3-<BR>-4 \----------4-<BR>a的1何b的4连接。就在a1和b4间连通。用图还是用链表来表示好?主要这个连接并不是固定的经常要修改。。。。请教大侠乐。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:天才 回复日期:2002-11-28 14:36:56
<br>内容:你看这样行不行!<BR><BR>/////////////////////////////////////////////////////////////<BR>//ABManage.h<BR>#ifndef _ABMANAGE_H_<BR>#define _ABMANAGE_H_<BR><BR>#include <vector><BR>#include <iostream><BR>class AB<BR>{<BR>public:<BR> AB() {}<BR> AB(const int* const pi,int iLen) {assign(pi,iLen);}<BR> AB& operator =(const AB& ab)<BR> {<BR> if(this==&ab)<BR> return *this;<BR> m_veci=ab.m_veci;<BR> return *this;<BR> }<BR> int operator [](int i)<BR> {<BR> if(i>m_veci.size()-1)<BR> {<BR> return 0;<BR> }<BR> else<BR> {<BR> return m_veci[i];<BR> }<BR> }<BR> void assign(const int* const pi,int iLen)<BR> {<BR> m_veci.assign(pi,pi+iLen);<BR> }<BR> void push_back(int i) {m_veci.push_back(i);}<BR> void print()<BR> {<BR> if(m_veci.size()>0)<BR> {<BR> std::vector<int>::iterator l_itVec;<BR> for(l_itVec=m_veci.begin();l_itVec!=m_veci.end();l_itVec++)<BR> {<BR> std::cout<<*l_itVec<<' ';<BR> }<BR> std::cout<<std::endl;<BR> }<BR> else<BR> {<BR> std::cout<<"no data for print"<<std::endl;<BR> }<BR> }<BR> int size() {return m_veci.size();}<BR>private:<BR> std::vector<int> m_veci;<BR>};<BR><BR>template <class A,class B><BR>class AiBj<BR>{<BR>public:<BR> AiBj() {}<BR> AiBj(const A& a,const B& b)<BR> {<BR> m_a=a;<BR> m_b=b;<BR> }<BR> void setAB(const A& a,const B& b) {setA(a);setB(b);}<BR> void setA(const A& a) {m_a=a;}<BR> void setB(const B& b) {m_b=b;}<BR> A getA() const {return m_a;}<BR> B getB() const {return m_b;}<BR> AiBj& operator=(const AiBj& aibj)<BR> {<BR> if(this==&aibj)<BR> return *this;<BR> m_a=aibj.m_a;<BR> m_b=aibj.m_b;<BR> return *this;<BR> }<BR> bool operator==(const AiBj& aibj) const<BR> {<BR> if(aibj.m_a==m_a&&aibj.m_b==m_b)<BR> {<BR> return true;<BR> }<BR> else<BR> {<BR> return false;<BR> }<BR> }<BR>private:<BR> A m_a;<BR> B m_b;<BR>};<BR><BR>#include <string><BR>class ABRelation<BR>{<BR>public:<BR> ABRelation() {}<BR> ABRelation(const AB& a,const AB& b) {setAB(a,b);}<BR> void setAB(const AB& a,const AB& b)<BR> {<BR> m_a=a;m_b=b;m_vecAiBj.clear();<BR> }<BR> std::string getErrorMessage() {return m_strErrorMessage;}<BR> /*<BR> ia=0,1,2...<BR> ib=0,1,2...<BR> return:<BR> true=connect success or already exist<BR> false=connect failed and please see error message<BR> */<BR> bool connectABFromZero(int ia,int ib) {return connectABOriginal(ia,ib);}<BR> /*<BR> ia=1,2...<BR> ib=1,2...<BR> return:<BR> true=connect success or already exist<BR> false=connect failed and please see error message<BR> */<BR> bool connectABFromOne(int ia,int ib) {return connectABOriginal(ia-1,ib-1);}<BR> virtual void print()<BR> {<BR> std::vector<AiBjDoubleInt>::iterator l_it;<BR> if(m_vecAiBj.size()>0)<BR> {<BR> for(l_it=m_vecAiBj.begin();l_it!=m_vecAiBj.end();l_it++)<BR> {<BR> std::cout<<m_a[(*l_it).getA()]<<" connect to ";<BR> std::cout<<m_b[(*l_it).getB()];<BR> std::cout<<std::endl;<BR> }<BR> }<BR> else<BR> {<BR> std::cout<<"no relation between set A and set B"<<std::endl;<BR> }<BR> }<BR> /*<BR> ia=0,1,2...<BR> ib=0,1,2...<BR> */<BR> void disconnectABFromZero(int ia,int ib) {disconnectOriginal(ia,ib);}<BR> /*<BR> ia=1,2...<BR> ib=1,2...<BR> */<BR> void disconnectABFromOne(int ia,int ib) {disconnectOriginal(ia-1,ib-1);}<BR>protected:<BR> /*<BR> ia=0,1,2...<BR> ib=0,1,2...<BR> return:<BR> true=connect success or already exist<BR> false=connect failed and please see error message<BR> */<BR> bool connectABOriginal(int ia,int ib)<BR> {<BR> if(ia>m_a.size()-1||ib>m_b.size()-1)<BR> {<BR> setErrorMessage("out of range");<BR> return false;<BR> }<BR> if(checkConnectOriginal(ia,ib))<BR> {<BR> return true;<BR> }<BR> //add connection now<BR> AiBj<int,int> l_aibj(ia,ib);<BR> m_vecAiBj.push_back(l_aibj);<BR> return true;<BR> }<BR> /*<BR> ia=0,1,2...<BR> ib=0,1,2...<BR> true = connect existence,false = connect inexistence<BR> */<BR> bool checkConnectOriginal(int ia,int ib)<BR> {<BR> std::vector<AiBjDoubleInt>::iterator l_it;<BR> AiBjDoubleInt l_AiBjdoubleInt(ia,ib);<BR><BR> for(l_it=m_vecAiBj.begin();l_it!=m_vecAiBj.end();l_it++)<BR> {<BR> if(*l_it==l_AiBjdoubleInt)<BR> {<BR> return true;<BR> }<BR> }<BR> return false;<BR> }<BR> /*<BR> ia=0,1,2...<BR> ib=0,1,2...<BR> */<BR> void disconnectOriginal(int ia,int ib)<BR> {<BR> if(m_vecAiBj.size()==0)<BR> {<BR> return ;<BR> }<BR><BR> std::vector<AiBjDoubleInt>::iterator l_it;<BR> AiBjDoubleInt l_AiBjdoubleInt(ia,ib);<BR><BR> for(l_it=m_vecAiBj.begin();l_it!=m_vecAiBj.end();l_it++)<BR> {<BR> if(*l_it==l_AiBjdoubleInt)<BR> {<BR> m_vecAiBj.erase(l_it);<BR> return ;<BR> }<BR> }<BR> return ;<BR> }<BR> void setErrorMessage(std::string str)<BR> {<BR> m_strErrorMessage=str;<BR> }<BR>public:<BR> typedef AiBj<int,int> AiBjDoubleInt;<BR>private:<BR> AB m_a;<BR> AB m_b; <BR> std::vector<AiBjDoubleInt> m_vecAiBj;<BR> std::string m_strErrorMessage;<BR>};<BR><BR>#endif _ABMANAGE_H_<BR><BR>///////////////////////////////////////////////////////////////////<BR>//main.cpp<BR>#include "ABManage.h"<BR>void main(void)<BR>{<BR> int l_i1[5]={1,2,3,4,5},l_i2[4]={99,96,88,66};<BR> AB l_ab1(l_i1,5),l_ab2(l_i2,4);<BR> ABRelation l_abr(l_ab1,l_ab2);<BR> l_abr.disconnectABFromOne(1,4);<BR> if(!l_abr.connectABFromZero(0,1))<BR> {<BR> std::cout<<"connectABFromZero(0,1)"<<"----";<BR> std::cout<<l_abr.getErrorMessage()<<std::endl;<BR> }<BR> if(!l_abr.connectABFromOne(1,4))<BR> {<BR> std::cout<<"connectABFromOne(1,4)"<<"----";<BR> std::cout<<l_abr.getErrorMessage()<<std::endl;<BR> }<BR> if(!l_abr.connectABFromOne(100,4))<BR> {<BR> std::cout<<"connectABFromOne(100,4)"<<"----";<BR> std::cout<<l_abr.getErrorMessage()<<std::endl;<BR> }<BR> l_abr.print();<BR> l_abr.disconnectABFromOne(1,2);<BR> l_abr.disconnectABFromOne(1,4);<BR> if(!l_abr.connectABFromOne(3,4))<BR> {<BR> std::cout<<"connectABFromOne(3,4)"<<"----";<BR> std::cout<<l_abr.getErrorMessage()<<std::endl;<BR> }<BR> l_abr.print();<BR> int l_i3[5]={11,22,33,44,55},l_i4[4]={999,996,988,966};<BR> l_ab1.assign(l_i3,5);l_ab2.assign(l_i4,4);<BR> l_abr.setAB(l_ab1,l_ab2);<BR> if(!l_abr.connectABFromOne(2,1))<BR> {<BR> std::cout<<"connectABFromOne(2,1)"<<"----";<BR> std::cout<<l_abr.getErrorMessage()<<std::endl;<BR> }<BR> l_abr.print();<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天才 回复日期:2002-11-28 14:58:50
<br>内容:漏掉checkConnectAB了<BR><BR>//class ABRelationCanCheck<BR>class ABRelationCanCheck : public ABRelation<BR>{<BR>public:<BR> ABRelationCanCheck() {}<BR> ABRelationCanCheck(const AB& a,const AB& b):ABRelation(a,b) {}<BR> /*<BR> ia=0,1,2...<BR> ib=0,1,2...<BR> true = connect existence,false = connect inexistence<BR> */<BR> bool checkConnectABFromZero(int ia,int ib) {return checkConnectOriginal(ia,ib);}<BR> /*<BR> ia=1,2...<BR> ib=1,2...<BR> true = connect existence,false = connect inexistence<BR> */<BR> bool checkConnectABFromOne(int ia,int ib) {return checkConnectOriginal(ia-1,ib-1);}<BR>};
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -