1 dfs是深度优先遍历,从一个点从头找到尾,知道找到题目所要求的数目或者无法搜索是会回溯
回溯过后继续寻找,直至找到所有的方案;
2 要根据提议选择是否进行回溯;有的题目是寻找所有能够到达点的个数是不用回溯;
例题
题目描述给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
输入第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。
输出给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。
样例输入2 2 1 1 1 2 2 1 2样例输出
#includeusing namespace std; int a[101][101]; int dx[4]={0,-1,0,1}; int dy[4]={-1,0,1,0}; int x1,x2,y3,y2,s,n,m; void dfs(int x,int y){ if(x==x2-1&&y==y2-1)s++; for(int i=0;i<4;i++){ int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=0&&xx =0&&y >n>>m>>t; scanf("%d%d%d%d",&x1,&y3,&x2,&y2); while(t--){ int q,w;cin>>q>>w; a[q-1][w-1]=1; } dfs(x1-1,y3-1); printf("%d",s); }
1



