dfs,超简单入门题

写递推也写了有一些题了,这次用dfs写一遍,居然和我推的样例对上了!!!之前交了三次用递推写出的规律都WA,这次试了一下dfs,居然是TLE!!!果断打表,居然过了!!!开心O(∩_∩)O

需要注意的是,刚写完这个dfs时我样例都过不了,出错的原因也是让我感到无语的:
a[3][2]={(9,-1),(-1,0),(0,1)}这样写是错的!!!还是基础有问题!!里面要写花括号,记住了!!! ,a[3][2]={{0,-1},{-1,0},{0,1}}才是对的呢,细节!注意细节啊!!!
对了,附上题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2563

//这是我第一个AC的dfs,入门题,真的超简单。。。。。。明天试试写八皇后
// #include
#include<cstring>
using namespace std;
int n,a[3][2]={{0,-1},{-1,0},{0,1}},book[100][100],tag,step;//右,上,左 //a[3][2]={(9,-1),(-1,0),(0,1)}这样写是错的!!!还是基础有问题!!里面要写花括号,记住了!!! 
void dfs(int step,int x,int y)
{
	int xx,yy;
	if(step==n)
	{
		tag++;
	//	cout<<"tag: "<
		return;
	}
	for(int i=0;i<3;i++)
	{
		xx=x+a[i][0];
		yy=y+a[i][1];
	//	cout<<"xx:"<
		if(book[xx][yy]==0)
		{
	//		printf("book[%d][%d]=%d\n",xx,yy,book[xx][yy]);
			book[xx][yy]=1;
	//		printf("标记:book[%d][%d]=%d\n",xx,yy,book[xx][yy]);
			dfs(step+1,xx,yy);
			book[xx][yy]=0;
	//		printf("回溯:book[%d][%d]=%d\n",xx,yy,book[xx][yy]);
			//return;
		}
	}
	
}
int main()
{
	int c;
	cin>>c;
	int biao[22]={3,7,17,41,99,239,577,1393,3363,8119,19601,47321,114243,275807,665857,1607521,3880899,9369319,22619537,54608393};
	while(c--)
	{
		/*tag=0;
		memset(book,0,sizeof(book));
		book[50][50]=1;
		cin>>n;
		dfs(0,50,50);
		cout<//
		cin>>n;
		cout<<biao[n-1]<<endl;
		
	} 
} 

你可能感兴趣的:(dfs)