不是VIP会员,不能显示答案

题目解答

题目:
逻辑游戏

题目描述:

一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。

对于图1,我的同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。



输入:

输入的图形用一个n×n的矩阵表示的。矩阵的每一个单元里有一个0到255之间(包括0和255)的整数。处于同一个区域的单元里的数相同,相邻区域的数不同(但是不相邻的区域里的数可能相同)。

输入的第一行是n(0<n<100)。以下的n行每行包括n个整数,分别给出对应的单元里的整数(这n个整数之间用空格分开)。图4给出了输入样例对应的图形。

输出:

当可以画出满足题意的曲线的时候,输出“YES”;否则,输出“NO”。

输入样例:

3

1 1 2

1 2 2

1 1 2

输出样例:

YES

程序:

#include <stdio.h>

#include <math.h>

int orig, n, ns, a [102][102], bun;

int d[]= {1,0,-1,0,0,1,___(1)___};

void plimba(int x, int y) {

int i,xx, yy;

a[x][y]=-a[x][y] ;

if(abs(a[x-1][y]) !=orig&&( ___(2)___ !=a[x-1][y]||abs(a[x][y-1]) !=orig)) ns++;

if(abs(a[x+1][y]) !=orig&& (a[x+1][y-1]!=a[x+1][y]||abs(a[x][y-1]) !=orig)) ns++;

if(abs(a[x][y-1]) !=orig&&( ___(3)___ !=a[x][y-1]||abs(a[x-1][y]) !=orig)) ns++;

if(abs(a[x][y+1]) !=orig&&(a[x-1][y+1] !=a[x][y+1]||abs(a[x-1][y]) !=orig)) ns++;

for(i=0; i<4 ; i++) {

xx=x+d[2*i]; yy=y+___(4)___;

if(xx>=1&&xx<=n&&yy>=1&&yy<=n&& ___(5)___ )plimba(xx,yy);

}

}

int main () {

int i,j;

bun=1;

scanf("%d",&n);

for (i=0; i<=n+1; i++)

for (j=0; j<=n+1; j++) a[i][j]=0;

a[0][0]=-1; a[n+1][0]=-1;

a[0][n+1]=-1; a[n+1][n+1]=-1;

for (i=1; i<=n; i++)

for (j=1; j<=n; j++) scanf("%d",&a[i][j]);

for (i=1; i<=n ; i++)

for(j=1; j<=n; j++) {

if(a[i][j]>-1) {

ns=0; ___(6)___;

plimba (i,j);

if(ns%2==1) bun=0;

}

}

if (bun)printf("YES\n");else printf("NO\n");

return 0;

}


选择题

1) ⑴处应填( )。

2) ⑵处应填( )。

3) ⑶处应填( )。

4) ⑷处应填( )。

5) ⑸处应填( )。

6) ⑹处应填( )。
考点:
分析:
解答:
评论:
老师: