题目描述
挖掘机学校哪家强?中国山东找蓝翔。这几天,蓝翔技工学校在进行挖掘机比赛。比赛是这样进行的:一块场地被划分成了nn个格子,每个学生要驾驶挖掘机不重复地开过每个格子,并且只允许在格子中间转弯。如下图,分别是44和3*3的情况
每个学生只能从边界上的点进出比赛场地。并且,为了显示高超的挖掘机驾驶技巧,比赛的分数就是在场地上转弯的次数,就是图中的1/4圆形标注的。比如1号图是12次,2号图是5次。
输入
一行:n (场地被划分成了n * n个格子 ,)
第2~n+1行:挖掘机的路线 (路线为从1 –>2->3…->n*n);
输出
一个整数,表示比赛的分数
样例输入
3
1 2 3
8 7 4
9 6 5
样例输出
5
数据范围限制
N<500
这道题是个真真真(在此省略n个)的水题
所以事不宜迟,直接上代码:
#include<bits/stdc++.h>
using namespace std;
int n,ans,a[3005][3005],x,y,way[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void dg(int xx,int yy,int f,int num){
if(num>n*n){
return ;
}
for(int i=0;i<4;i++){
int xxx=xx+way[i][0];
int yyy=yy+way[i][1];
if(a[xxx][yyy]==num+1&&xxx>=1&&xxx<=n&&yyy>=1&&yyy<=n){
if(f!=i+1&&f!=0) ans++;
dg(xxx,yyy,i+1,num+1);
}
}
}
int main(){
freopen("d.in","r",stdin);
freopen("d.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
if(a[i][j]==1){
x=i;
y=j;
}
}
}
dg(x,y,0,1);
printf("%d",ans);
fclose(stdin);
fclose(stdout);
return 0;
}