POJ 1321 棋盘问题 DFS
2011-09-02 11:19
489 查看
中文题意、、、不解释。。要理解DFS的精髓。。不然是做不出来的。。
#include <iostream>
using namespace std;
char map[8][8];
int vis[8];
int n,sum,m;//sum为方案数,m为棋子数
void dfs(int hang,int step)
{
int i;
if(step==m)//step是当前放的棋子的数目,如果step==m,则方案数加1,进入下个DFS
{
sum++;
return;
}
if(hang>n)//行比N大的话就退出
return ;
for(i=0;i<n;i++)
{
if(vis[i]==0&&map[hang][i]=='#')
{
vis[i]=1;
dfs(hang+1,step+1);
vis[i]=0;//回溯
}
}
dfs(hang+1,step);//如果这行没有找到#,则进入下一行。。
}
int main()
{
int i,j;
while(cin>>n>>m)
{
if(n==-1&&m==-1)
break;
sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cin>>map[i][j];
}
memset(vis,0,sizeof(vis));
dfs(0,0);//从第0行开始深搜。。
cout<<sum<<endl;
}
return 0;
}
#include <iostream>
using namespace std;
char map[8][8];
int vis[8];
int n,sum,m;//sum为方案数,m为棋子数
void dfs(int hang,int step)
{
int i;
if(step==m)//step是当前放的棋子的数目,如果step==m,则方案数加1,进入下个DFS
{
sum++;
return;
}
if(hang>n)//行比N大的话就退出
return ;
for(i=0;i<n;i++)
{
if(vis[i]==0&&map[hang][i]=='#')
{
vis[i]=1;
dfs(hang+1,step+1);
vis[i]=0;//回溯
}
}
dfs(hang+1,step);//如果这行没有找到#,则进入下一行。。
}
int main()
{
int i,j;
while(cin>>n>>m)
{
if(n==-1&&m==-1)
break;
sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cin>>map[i][j];
}
memset(vis,0,sizeof(vis));
dfs(0,0);//从第0行开始深搜。。
cout<<sum<<endl;
}
return 0;
}
相关文章推荐
- POJ 1321 棋盘问题(dfs)
- POJ 1321——棋盘问题(DFS)
- poj 1321 棋盘问题【dfs】
- (Relax DFS1.3)POJ 1321 棋盘问题(使用DFS来解决特定终点问题)
- POJ 1321-棋盘问题(DFS)
- poj 1321 棋盘问题 - DFS 2251 Dungeon Master - BFS
- Problem A POJ 1321 棋盘问题(dfs)
- POJ1321 棋盘问题 DFS
- poj 1321 棋盘问题(dfs,回溯)
- poj 1321 棋盘问题 (dfs 回溯)
- poj 1321 棋盘问题 (dfs)
- POJ 1321 棋盘问题(dfs)
- POJ 1321 棋盘问题 --- DFS
- 棋盘问题 POJ - 1321(DFS)
- poj_1321 棋盘问题(dfs)
- 1321 Poj 棋盘问题(类似N皇后--暴力DFS)
- poj 1321 棋盘问题 简单dfs
- POJ-1321 棋盘问题(DFS+回溯)
- poj1321 棋盘问题 dfs入门 TWT Tokyo Olympic 1combo-1
- poj1321——棋盘问题(DFS)