题目描述
画一些小格子,如下所示:
MAKEAMERICA
AKEAMERICAG
KEAMERICAGR
EAMERICAGRE
AMERICAGREA
MERICAGREAT
ERICAGREATA
RICAGREATAG
ICAGREATAGA
CAGREATAGAI
AGREATAGAIN
现在如果从开头左上方的M出发,连到右下方的N,若能按顺序拼成MAKEAMERICAGREATAGAIN ,那么算出路线条数。
**题解:**dfs
#include<stdio.h>
#include<string.h>
int res=0;
char a[11][11]={
'M','A','K','E','A','M','E','R','I','C','A',
'A','K','E','A','M','E','R','I','C','A','G',
'K','E','A','M','E','R','I','C','A','G','R',
'E','A','M','E','R','I','C','A','G','R','E',
'A','M','E','R','I','C','A','G','R','E','A',
'M','E','R','I','C','A','G','R','E','A','T',
'E','R','I','C','A','G','R','E','A','T','A',
'R','I','C','A','G','R','E','A','T','A','G',
'I','C','A','G','R','E','A','T','A','G','A',
'C','A','G','R','E','A','T','A','G','A','I',
'A','G','R','E','A','T','A','G','A','I','N'
};
char b[21]={'M','A','K','E','A','M','E','R','I','C','A','G','R','E','A','T','A','G','A','I','N'};
int dfs(int i,int j,int k){
if(i==10&&j==10){//若能来到这里,一定是正确的路线
res++;
}
if(i>10||j>10) return 0;
if(a[i][j]==b[k]){//每步一判断,如果这一步可以走,继续下一步
dfs(i+1,j,k+1);//向下走
dfs(i,j+1,k+1);//向右走
}
}
int main(){
dfs(0,0,0);
printf("%d",res);
}