poj1321 DFS
生活随笔
收集整理的這篇文章主要介紹了
poj1321 DFS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
棋盤問題
Time Limit: 1000 MS Memory Limit: 10000 KB
64-bit integer IO format: %I64d , %I64u Java class name: Main
[Submit] [Status] [Discuss]
Description
在一個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請編程求解對于給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案C。Input
輸入含有多組測試數據。每組數據的第一行是兩個正整數,n k,用一個空格隔開,表示了將在一個n*n的矩陣內描述棋盤,以及擺放棋子的數目。 n <= 8 , k <= n
當為-1 -1時表示輸入結束。
隨后的n行描述了棋盤的形狀:每行有n個字符,其中 # 表示棋盤區域, . 表示空白區域(數據保證不出現多余的空白行或者空白列)。
Output
對于每一組數據,給出一行輸出,輸出擺放的方案數目C (數據保證C<2^31)。Sample Input
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1Sample Output
2 1#include<iostream> #include <string.h> using namespace std;bool chess[9][9]; bool vist_col[9]; //列標記 int status; //狀態計數器 int n,k;void DFS(int row,int num) //逐行搜索,row為當前搜索行,num為已填充的棋子數 {if(num==k){status++;return;}if(row>n) //配合下面DFS(row+1,num); 語句使用,避免搜索越界return;for(int j=1; j<=n; j++){if(chess[row][j] && !vist_col[j]){vist_col[j]=true; //放置棋子的列標記DFS(row+1,num+1);vist_col[j]=false; //回溯后,說明擺好棋子的狀態已記錄,當前的列標記還原 }}DFS(row+1,num); //這里是難點,當k<n時,row在等于n之前就可能已經把全部棋子放好//又由于當全部棋子都放好后的某個棋盤狀態已經在前面循環時記錄了//因此為了處理多余行,令當前位置先不放棋子,搜索在下一行放棋子的情況return; }int main(int i,int j) {while(cin>>n>>k){if(n==-1 && k==-1)break;/*Initial*/memset(chess,false,sizeof(chess));memset(vist_col,false,sizeof(vist_col));status=0;for(i=1; i<=n; i++)for(j=1; j<=n; j++){char temp;cin>>temp;if(temp=='#')chess[i][j]=true;}DFS(1,0); //注意初始化的值別弄錯了cout<<status<<endl;}return 0; }
題意:? 難得的漢字題面
這個錯在哪里了呢
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;bool map[9][9];bool vis[9];int n,k;int sum;void dfs(int row,int num){if(num==k){sum++;return;}if(row>n)return;for(int i=1;i<=n;i++){if(map[row][i]==true&&vis[i]==false){vis[i]=true;dfs(row+1,num+1);vis[i]==false;}}dfs(row+1,num);return;}int main(){while(cin>>n>>k){if(n==-1&&k==-1)break;memset(vis,false,sizeof(vis));sum=0;memset(map,false,sizeof(map));for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){char str;cin>>str;if(str=='#')map[i][j]=true;}}dfs(1,0);cout<<sum<<endl;}return 0;}?
轉載于:https://www.cnblogs.com/zhangying/p/3860435.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的poj1321 DFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的WebService实践(cx
- 下一篇: Hadoop集群三种作业调度算法介绍