问题描述
- 如何用深度搜索出需要的那条路?c++
-
n m t
3 4 7
S.X.
..X.
...D
n等于行,m等于列,t为步数,S为起始位置,要在刚好t步到达D。#include <iostream> #include <cstring> using namespace std; int n,m,t,sum,flag=0; int x2,y2; char a[10][10]; int b[10][10]; int xy[][2]={{1,0},{0,1},{-1,0},{0,-1}}; void dfs(int i,int j) { int tx,ty,k; b[i][j]=1; for (k=0;k<4;++k) { tx=i+xy[k][0] ; ty=j+xy[k][1] ; if(tx>=0&&tx<n&&ty>=0&&ty<m&&a[tx][ty]!='X'&&b[tx][ty]==0) { sum++; if (sum==t&&x2==tx&&y2==ty)//找到所用步数相等且刚好在‘D’点那里 { flag=1; return; } dfs(tx,ty); b[tx][ty]=0 ;//不符合就回溯(不知道有没有用错) sum--; } } } int main() { int i,j,x1,y1; while(cin >> n >> m >> t) { sum=0; flag=0; memset(b,0,sizeof(b)); for(i=0;i<n;++i) { cin >> a[i] ; } for(i=0;i<n;++i) { for (j=0;j<m;++j) { if (a[i][j]=='S') { x1=i; y1=j; } else if (a[i][j]=='D') { x2=i; y2=j; } } } dfs(x1,y1); cout << "sum: " << sum << " flag: " << flag << endl; for(i=0;i<n;++i)//看一下标记的路径 { for(j=0;j<m;++j) { cout << b[i][j] << " " ; } cout << endl; } if (flag==1&&sum==t) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; }
怎样才能实现啊?
时间: 2024-12-02 12:06:37