首页 > 学院 > 开发设计 > 正文

poj1321

2019-11-06 06:28:11
字体:
来源:转载
供稿:网友
//poj1321
#include <iostream>#include <string.h>using namespace std;int n, k;int total = 0;char board[10][10];bool visited[10];/*思路:DFS,一行一行的搜,找到一个解*/bool DFS(int x, int last){	if (last == 0)	{		return true;	}	if (n - x  < last)	{		return false;	}//放在这0MS	for (int i = 0; i < n - x; i++)	{		/*if (n - x - i < last)		{			return false;		}*///放在这个地方16MS		for (int j = 0; j < n; j++)		{			if (board[x+i][j] == '#' && visited[j] == false)			{				visited[j] = true;				if (DFS(x+i+1, last-1))//在这卡了一下,last一直想先减了再加,因为递归的调用,					//这样会出现各种问题不是多一个就是少一个,水平还是不行,这么简单的纠结了半天。				{					total++;				}				visited[j] = false;			}		}	}	return false;}int main(int argc, char **argv){	while (cin >> n >> k)	{		if (n==-1 && k==-1)		{			break;		}		total = 0;		memset(visited, false, sizeof(visited));		memset(board, 0, sizeof(board));		for (int i = 0; i < n; i++)		{			cin >> board[i];		}		DFS(0, k);		cout << total << endl;	}		return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表