您的位置:首页 > 其它

UVA127 - "Accordian" Patience

2015-02-27 15:36 471 查看
#include<iostream>
#include<malloc.h>
using namespace std;
//#define NULL 0
typedef struct Node{
char data[3];
struct Node*down;
} Node,*NodeList;
int PiPei(char*a,char*b){
if(a[0]==b[0]||a[1]==b[1])return 1;
return 0;
}
void QianYi(Node**L,int a,int &b){
int i=a;
Node*p;
for(i=a;i<b-1;i++)
L[i]=L[i+1];
b--;
}
void fun(Node**L,int & last){
int s=0;
last=52;
Node * p,*q;
while(s<last){
if(s>2&&PiPei(L[s]->data,L[s-3]->data)){
p=L[s-3];
L[s-3]=L[s];
L[s]=L[s]->down;
L[s-3]->down=p;
if(!L[s])QianYi(L,s,last);
s=s-3;
}
else if(s>0&&PiPei(L[s]->data,L[s-1]->data)){
p=L[s-1];
L[s-1]=L[s];
L[s]=L[s]->down;
L[s-1]->down=p;
if(!L[s])QianYi(L,s,last);
s=s-1;
}
else s++;
}
}
void FuWei(Node**L,int last){
int i=0,s=last;
Node*p;
for(i=0;i<last;i++){
p=L[i]->down;
while(p){
L[s]=p;
p=p->down;
L[s]->down=NULL;
s++;
}
L[i]->down=NULL;
}
}
int main(){
char pai[3];
int i=0,last,a[52];
Node*L[52],*p;
for(i=0;i<52;i++){
L[i]=(Node*)malloc(sizeof(Node));
L[i]->down=NULL;
}
cin>>pai;
while(pai[0]!='#'){
L[0]->data[0]=pai[0];L[0]->data[1]=pai[1];L[0]->data[2]='\0';
for(i=1;i<52;i++)
cin>>L[i]->data;
fun(L,last);
if(last>1){
cout<<last<<" piles remaining:";

for(i=0;i<last;i++){
p=L[i];a[i]=0;int num=0;
while(p){
num++;
p=p->down;
}
cout<<" "<<num;
}
}
else cout<<"1 pile remaining: 52";
cout<<endl;
FuWei(L,last);
cin>>pai;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: