zoukankan      html  css  js  c++  java
  • 1396. 【2014年鄞州区】挖掘机(d.pas/c/cpp)

    题目描述
    挖掘机学校哪家强?中国山东找蓝翔。这几天,蓝翔技工学校在进行挖掘机比赛。比赛是这样进行的:一块场地被划分成了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;
    }
    
  • 相关阅读:
    js实现方块弹珠游戏
    学习servlet时出现的一些问题
    简述JAVA类的生命周期
    JAVA高级之路----JAVA多线程
    小计Tomcat的调优思路
    java生成pdf
    git分支在团队中的使用
    程序员修炼内功心法
    学会学习
    如何快速阅读
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13159916.html
Copyright © 2011-2022 走看看