深度搜尋,但是要注意搜尋的方式:
本文給出兩份**,乙份是ac**,乙份是超時的,你們感受下。
從第一行開始,對於每一行,搜尋整行,如果有『#』,標記,然後,則搜尋下一行。
ac**:
/*poj1321
2013-04-11
*/#include#includeusing namespace std;
int line[9];
int map[9][9];
int n;//棋盤大小
int m;//擺放棋子的數目
int allsum;//方案數
void dfs(int row,int sum)
if(row>n) //防止越界
return;
for(int i=1;i<=n;i++)
} dfs(row+1,sum);
}int main()
getchar();
} //初始化
allsum=0;
for(i=1;i<=n;i++)
line[i]=1;
//深搜
dfs(1,0);
cout《超時的**:
/*poj1321
2013-04-11
*/#include#includeusing namespace std;
int n,m;
char map[9][9];
bool flag[9][9];
int row[9],line[9];//訊號量
int allsum;
void bfs(int i,int j,int sum)
bfs(i,j+1,sum);
bfs(i,j-1,sum);
bfs(i+1,j,sum);
bfs(i-1,j,sum);
flag[i][j]=true;
row[i]--;
line[j]--;
}else
}int main()
getchar();
}for(i=1;i<=n;i++)
allsum=0;
bfs(1,1,0);
printf("%d\n",allsum);
}return 0;
}
POJ 1321 棋盤問題(棋盤DFS)
棋盤問題 思路 分層查詢,逐行深搜。注意k n時的處理。1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 include 10 define ll long long 11 define...
POJ 1321 棋盤問題 DFS
題意 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。題解 include using namespace std define n 10 bo...
poj 1321 棋盤問題(DFS)
大概題意就是給你乙個棋盤,讓你放棋子,求在棋盤n n上的 放上k個棋子的所有情況的數目。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列。深搜可以搜尋出所有答案。直接看 include includebool chess 9 9 bool vis col 9 int n,k,ans void...