您的位置:首页 > 其它

皇后问题栈实现

2015-03-05 14:27 267 查看
#include<iostream.h>

#include<Windows.h>

#include<stdlib.h>

#define M 20

#define N 20

struct queen{

int x;

int y;

queen *next;

};

void push(int xx,int yy,queen *head){

static queen *p=head;

queen *new_node=(queen *)malloc(sizeof(queen));

new_node->x=xx;

new_node->y=yy;

p->next=new_node;

p=new_node;

p->next=NULL;

}

void pop(int &xx,int &yy,queen *head){

while(head->next->next!=NULL)

head=head->next;

queen *p=head->next;

head->next=NULL;

xx=p->x;

yy=p->y;

free(p);

}

void displaystack(queen *head)

{queen *p;

p=head;

while(head!=NULL)

{cout<<p->x<<endl;

head=head->next;}

}

void createqueen(int array

,int m,int n)

{

for(int i=0;i<m;i++)

for(int j=0;j<n;j++)

array[i][j]=1;

}

void printqueen(int array

,int m,int n){

for(int i=0;i<m;i++){

for(int j=0;j<n;j++){

if(array[i][j]==1)cout<<"■";

if(array[i][j]==2)cout<<"♀";

if(array[i][j]==3)cout<<"※";

if(array[i][j]==4)cout<<"×";

}

cout<<endl;

}Sleep(200);cout<<endl;

}

void changequeen(int array

,int ii,int jj,int m,int n){

for(int k=0;k<m;k++)

array[k][jj]=4;

for( k=0;k<n;k++)

array[ii][k]=4;

int i=ii;

int j=jj;

while(i<m&&j<n)

array[++i][++j]=4;

i=ii;

j=jj;

while(i>=0&&j>=0)

array[--i][--j]=4;

i=ii;

j=jj;

while(i<m&&j>=0)

array[++i][--j]=4;

i=ii;

j=jj;

while(i>=0&&j<m)

array[--i][++j]=4;

array[ii][jj]=2;

}

void changequeens(queen *head,int array

,int m,int n,queen*head2)

{int i,j;

createqueen(array,m,n);

head2->next=NULL;

while(head->next!=NULL){

pop(i,j,head);

push(i,j,head2);

changequeen(array,i,j,m,n);

}

while(head2->next!=NULL)

{pop(i,j,head2);

push(i,j,head);

}

head2->next=NULL;

}

void movequeen(int m,int n,int a

,queen *head,queen *head2)

{

int j=0;

int next=0;

int nexts=0;

int nextss=1;

for(;j<n;)

{

int i=0;

int array

;

for(int x=0;x<M;x++)

for(int y=0;y<N;y++)

array[x][y]=a[x][y];

array[i][j]=2;

push(i,j,head);

changequeen(array,i,j,m,n);

//printqueen(array,m,n);

for(i=1;i<m;)

{

for(int k=0;k<n;k++)

{

nextss:nextss++;

if(array[i][k]==1)

{ push(i,k,head);changequeen(array,i,k,m,n);//printqueen(array,m,n);

if((i+1)==m)

{printqueen(array,m,n);head->next=NULL;goto nexts;}

goto next;

}

if((k+1)==n)

{

if(head->next==NULL)

goto nexts;

pop(i,k,head);

changequeens(head,array,m,n,head2);

array[i][k]=3;

printqueen(array,m,n);

goto nextss;

}

}

next:i++;

}

nexts:j++;

}

cout<<"完毕";

}

void main(){

queen *head=(queen *)malloc(sizeof(queen));

head->x=0;

head->y=0;

head->next=NULL;

queen *head2=(queen *)malloc(sizeof(queen));

head2->next=NULL;

int queens

;

int m,n;

cout<<"请输入行和列";

cin>>m>>n;

createqueen(queens,m,n);

//printqueen(queens,m,n);

movequeen(m,n,queens,head,head2);

return;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: