解题思路:

注意事项:

参考代码:

#include<stdio.h>
int vis[100][100];
int bei[100];
int xi[100];
int xy[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int n;
int s[200];
int ri=0;
int flag=0;

int f2();

int f1(int t,int tx,int ty);

void dfs(int tx,int ty);

int main()
{
	int i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&bei[i]);
	}
	for(j=0;j<n;j++)
	{
		scanf("%d",&xi[j]);
	}
	vis[0][0]=1;
	s[ri]=0;
	ri++;
	dfs(0,0);
	return 0;
}
int f2()
{
	int xx[200]={0};
	int yy[200]={0};
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(vis[i][j])
			yy[i]++;
			if(vis[j][i])
			xx[i]++;
		}
		if(yy[i]!=xi[i]||xx[i]!=bei[i])
		return 0;
	}
	return 1;
}
int f1(int t,int tx,int ty)
{
	tx=tx+xy[t][0];
	ty=ty+xy[t][1];
	if(tx<0||tx>=n||ty<0||ty>=n)
	return 0;
	if(vis[tx][ty])
	return 0;
	return 1;
}
void dfs(int tx,int ty)
{
	int i,j;
	if(tx==n-1&&ty==n-1)
	{
		if(f2())
		{
			for(j=0;j<ri;j++)
			{
				printf("%d ",s[j]);
			}
			printf("\n");
			flag=1;
		}

	}
	for(i=0;i<4;i++)
	{
		if(f1(i,tx,ty))
		{
			tx=tx+xy[i][0];
			ty=ty+xy[i][1];
			vis[tx][ty]=1;
			s[ri]=tx*n+ty;
			ri++;
			dfs(tx,ty);
			if(flag==1)
			return;
			ri--;
			vis[tx][ty]=0;
			tx=tx-xy[i][0];
			ty=ty-xy[i][1];
		}
	}
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论