用迴圈單鏈表(兩個模板類:結點類,迴圈鏈表類)解決拉丁方陣問題。

來源:互聯網
上載者:User

拉丁方陣就是這樣的

比如4階拉丁方陣

1 2 3 4

2 3 4 1

3 4 1 2

4 1 2 3

 

每行每列沒重複的數字,這裡藉助迴圈單鏈表來實現,思路:第一遍曆(第一行的資料)從第一個結點(注意不是頭結點)開始,第二次遍曆(第二行的資料)從第二個結點開始,一次類推。。。。。。

代碼如下:(比較容易看懂,沒分.H檔案很.CPP檔案)

 

//CirListNode類<br />#include<stdio.h><br />template <class T> class CirListNode<br />{<br /> T data;<br /> CirListNode<T>* link;<br /> public:<br /> CirListNode():link(NULL){}<br /> CirListNode(T value):link(NULL),data(value){}<br /> ~CirListNode(){}<br /> void SetLink(CirListNode<T>* next);<br /> CirListNode<T>* GetLink();<br /> T& GetData();<br />void SetData(T value);<br />};<br />template<class T><br />void CirListNode<T>::SetData(T value)<br />{<br />data=value;<br />}</p><p>template<class T><br />void CirListNode<T>::SetLink(CirListNode<T>* next)<br />{<br /> link=next;<br />}<br />template<class T><br />CirListNode<T>* CirListNode<T>::GetLink()<br />{<br /> return link;<br />}<br />template<class T><br />T& CirListNode<T>::GetData()<br />{<br /> return data;<br />} </p><p>//CirList類<br />template<class T> class CirList<br />{<br /> CirListNode<T>* head;<br /> CirListNode<T>* tail;<br /> CirListNode<T>* cur;<br /> public:<br /> CirList();<br /> ~CirList(){};<br /> bool AddTail(T value);<br /> void RemoveThis();<br /> void RemoveAll();<br /> void SetBegin();<br /> int GetCount();<br /> CirListNode<T>* GetCur();<br /> bool IsEmpty();<br /> T GetNext();<br />CirListNode<T>* GetNextNode();<br />void SetData(T value);<br />};<br />//CirList成員函數實現<br />template<class T><br />void CirList<T>::SetData(T value)<br />{<br />cur->SetData(value);<br />}</p><p>template<class T><br />CirListNode<T>* CirList<T>::GetNextNode()<br />{<br />cur=cur->GetLink();<br />return cur;<br />}</p><p>template<class T><br />CirList<T>::CirList()<br />{<br /> head=tail=new CirListNode<T>;<br /> cur=NULL;<br /> head->SetLink(head);<br />}<br />template <class T><br />bool CirList<T>::AddTail(T value)<br />{<br /> CirListNode<T>* add=new CirListNode<T>(value);<br /> tail->SetLink(add);<br /> tail=tail->GetLink();<br /> tail->SetLink(head->GetLink());<br /> if(tail!=NULL)<br /> {<br /> return true;<br /> }<br /> else<br /> return false; </p><p>}<br />template<class T><br />void CirList<T>::RemoveThis()<br />{<br /> if(cur==head)<br /> {<br /> cur=cur->GetLink();<br /> }<br />CirListNode<T>* preCur=cur;<br />for(int i=0;i<this->GetCount();i++)<br />{<br /> preCur=preCur->GetLink();<br />}<br />preCur->SetLink(cur->GetLink());<br />cur=preCur->GetLink();<br />preCur=NULL;<br />}<br />template<class T><br />void CirList<T>::RemoveAll()<br />{<br /> SetBegin();<br /> int length=GetCount();<br /> for(int i=0;i<length;i++)<br /> {<br /> RemoveThis();<br /> }<br /> cur=head;<br />}<br />template<class T><br />void CirList<T>::SetBegin()<br />{<br /> cur=head;<br />}<br />template<class T><br />int CirList<T>::GetCount()<br />{<br /> int num=0;<br /> CirListNode<T>* here=cur;<br /> while(cur->GetLink()!=here)<br /> {<br /> cur=cur->GetLink();<br /> ++num;<br /> }<br /> cur=cur->GetLink();<br /> return num;<br />}<br />template<class T><br />CirListNode<T>* CirList<T>::GetCur()<br />{<br /> return cur;<br />}<br />template<class T><br />bool CirList<T>::IsEmpty()<br />{<br /> return head->GetLink()==head;<br />}<br />template<class T><br />T CirList<T>::GetNext()<br />{<br /> if(cur==head)<br /> {<br /> cur=cur->GetLink();<br /> }<br /> T num =cur->GetData();<br /> cur=cur->GetLink();<br /> return num;<br />} </p><p>#include<iostream><br />using namespace std;<br />int main()<br />{<br />int num;<br />cout<<"請輸入拉丁方階數(2<=N<=9)";<br />cin>>num;<br />CirList<int> latin;<br />for(int i=1;i<=num;i++)<br />{<br />latin.AddTail(i);<br />}<br />latin.SetBegin();<br />latin.GetNextNode();<br />for(int j=0;j<num;j++)<br />{<br />for(int k=0;k<num;k++)<br />{<br />cout<<latin.GetCur()->GetData()<<" ";<br />latin.GetNextNode();<br />}<br />cout<<endl;<br />latin.GetNextNode();<br />//latin.GetNextNode();<br />}<br />return 0;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.