问题:当给出棋盘和起始点之后,最远能跳的距离是多少?
如图(b)所示,从A出发,可跳的路线不止一条,其中一条为:
A – B – F – L – K – E(可能不唯一)
3 2 3 3 3
它的跳过距离为14。
输入格式:
第1行3个整数n(1≤n≤100)、x、y(x,y是起始点坐标,图(b)中A处坐标为1,3)。接下来n行,每行n个数(0或1),数与数之间用一个空格分隔。
输出格式:
一个整数,即最大可跳距离(若不能跳,则输出0)。
输入样例:
4 3 2
1 0 1 0
1 1 1 1
0 0 1 0
1 1 0 1
输出样例:
6
01 #include<bits/stdc++.h>
02 using namespace std;
03 int n,i,j,k,ans;
04 int a[105][105],vis[105][105];//a表示棋盘,vis统计点是否走过
05 int dx[4]={-1,1,0,0},dy[4]={0,0,1,-1};
06 void dfs(int x,int y,int step)
07 {
08 ans=①;
09 for(int i=0;i<4;i++)
10 {
11 int tx=x,ty=y;s=0;
12 while(tx+dx[i]>0 && tx+dx[i]<=n
13 && ty+dy[i]>0 && ty+dy[i]<=n)
14 {
15 tx+=dx[i];
16 ty+=dy[i];
17 s++;
18 if(②)
19 break;
20 }
21 if(t>0 && tx<=n && ty>0 && ty<=n && vis[tx][ty]==0
22 && a[tx][ty]==0 && s!=1)
23 {
24 vis[tx][ty]=1;
25 dfs(tx,ty,③);
26 ④;
27 }
28 }
29 }
30 int main(){
31 int x,y,i,j;
32 cin>>n>>x>>y;
33 for(i=1;i<=n;i++)
34 for(j=1;j<=n;j++)
35 cin>>a[i][j];
36 ⑤;
37 dfs(x,y,0);
38 cout<<ans<<endl;
39 return 0;
40 }