poj1321 棋盤問題

來源:互聯網
上載者:User

這題想了好久,看了八皇后問題,這題比八皇后問題麻煩的地方是:棋子少於棋盤的行數時,要不斷地遞迴和回溯。直接上代碼(沒有任何剪枝)

#include<iostream><br />using namespace std;<br />int board[9][9],col[9],count;<br />void dfs(int n,int k,int line)//k是當前剩餘的棋子數,line是當前要試探的行<br />{<br />int i,j;<br />for(j=1;j<=n;j++)<br />if(board[line][j]&&!col[j])<br />{<br />if(k==1)<br />{<br />count++;<br />continue;<br />}<br />col[j]=1;<br />for(i=line+1;i<=n;i++)<br />dfs(n,k-1,i);<br />col[j]=0;<br />}<br />}<br />int main()<br />{<br />int b,num,c,r;<br />char chr;<br />while(scanf("%d%d",&b,&num))<br />{<br />if(b==-1&&num==-1)<br />break;<br />getchar();<br />for(r=1;r<=b;r++)<br />{<br />for(c=1;c<=b;c++)<br />{<br />scanf("%c",&chr);<br />if(chr=='#')<br />board[r][c]=1;<br />else<br />board[r][c]=0;<br />}<br />getchar();<br />}<br />if(num==0||b==0)<br />{<br />printf("0/n");<br />continue;<br />}<br />count=0;<br />for(r=1;r<=b-num+1;r++)<br />{<br />memset(col,0,sizeof(col));<br />dfs(b,num,r);<br />}<br />printf("%d/n",count);<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.