⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 choose.c

📁 数据结构实验马踏棋盘,按照程序提示操作
💻 C
字号:
#include "source.h"
int choose(int a[8][8],int c,int b)
{
	Chk *local,*p1,*p2;
	int count=0,m,flag=0,n,flag1[1]={0},i,j;
	local=(Chk *)malloc(SIZE);
	local->prior=local->next=NULL;
	a[c][b]=++count;
	local->i=c;local->j=b;
	local->tag=0;
	j=0;
	while(count!=64)
	{
		j++;
		if(local->tag==0)
		{
			local->HTry1[0]=local->i-2;local->HTry2[0]=local->j+1;
			local->HTry1[1]=local->i-1;local->HTry2[1]=local->j+2;
			local->HTry1[2]=local->i+1;local->HTry2[2]=local->j+2;
			local->HTry1[3]=local->i+2;local->HTry2[3]=local->j+1;
			local->HTry1[4]=local->i+2;local->HTry2[4]=local->j-1;
			local->HTry1[5]=local->i+1;local->HTry2[5]=local->j-2;
			local->HTry1[6]=local->i-1;local->HTry2[6]=local->j-2;
			local->HTry1[7]=local->i-2;local->HTry2[7]=local->j-1;
			local->tag=1;
		}
		if(local->prior!=NULL)
		{
			for(i=0;i<8;i++)
				if(local->prior->i==local->HTry1[i]&&local->prior->j==local->HTry2[i])
				{
					local->HTry1[i]=-2;
					local->HTry2[i]=-2;
					break;
				}
		}
        for(m=0;m<8;m++)
		{
			if(local->HTry1[m]>=0&&local->HTry1[m]<=7)
				if(local->HTry2[m]>=0&&local->HTry2[m]<=7)
				{
					if(a[local->HTry1[m]][local->HTry2[m]]!=0)
						continue;
					else
					{
						a[local->HTry1[m]][local->HTry2[m]]=++count;
						if(flag1[0]==0)
						{
							if(flag>0)
							{
								p1=local->next;
								p2=local->next;
								for(i=0;i<8;i++)
								{
									if(local->HTry1[i]==local->next->i&&local->HTry2[i]==local->next->j)
									{
										local->HTry1[i]=-2;
										local->HTry2[i]=-2;
									}
								}
								for(;p1!=NULL;)
								{
									a[p1->i][p1->j]=0;
									p2=p1->next;
									free(p1);
									p1=p2;
								}
								local->next=NULL;
								flag=0;
							}
						}
						n=m;
						local->next=(Chk *)malloc(SIZE);
						local->next->prior=local;
						local=local->next;
						local->i=local->prior->HTry1[m];local->j=local->prior->HTry2[m];
						local->next=NULL;
						local->tag=0;
						if(flag1[0]==1)
						{
							if(flag>0)
							{
								for(i=0;i<8;i++)
								{
									if(local->prior->HTry1[i]==local->i&&local->prior->HTry2[i]==local->j)
									{
										local->prior->HTry1[i]=-2;
										local->prior->HTry2[i]=-2;
									}
								}
								flag=0;
							}
						}
						break;
					}
				}
		}
		if(m==8)
		{
			local=Recoll(a,local,flag1);
			flag=1;
			count--;
		}
		if(local==NULL)
		{
			flag1[0]=1;
			for(i=0;i<=7;i++)
			{
				for(j=0;j<=7;j++)
					a[i][j]=0;
			}
			count=0;
			local=(Chk *)malloc(SIZE);
			local->prior=local->next=NULL;
			a[c][b]=++count;
			local->i=c;local->j=b;
			local->tag=0;			
		}
	}
	return 0;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -