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;
    }
    
  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13159916.html
Copyright © 2011-2022 走看看