您的位置:首页 > 其它

浙大PAT甲级 1074

2016-08-28 13:36 357 查看
刚开始输入时用map将id与node结构体相互映射,用vector来保存链表,然后根据除法与取余来判断是否有不番转的项。

AC代码:

#include<iostream>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#include<vector>
#define inf 999999999
using namespace std;
struct node
{
int id;
int data;
int next;
};
map<int,node> mm;
vector<node> v;
int main()
{
int sta,n,m;
scanf("%d %d %d",&sta,&n,&m);
for(int i=0;i<n;i++)
{
node tmp;
scanf("%d %d %d",&tmp.id,&tmp.data,&tmp.next);
mm[tmp.id]=tmp;
}
while(sta!=-1)
{
if(mm.find(sta)!=mm.end())
{
v.push_back(mm[sta]);
sta=mm[sta].next;
}
else
{
break;
}
}
if(m==1)
{
for(int i=0;i<v.size();i++)
{
printf("%05d %d ",v[i].id,v[i].data);
if(v[i].next==-1)
{
printf("-1\n");
}
else
{
printf("%05d\n",v[i].next);
}
}
}
else
{
int d=v.size()/m;
int yu=v.size()%m;
for(int i=0;i<d;i++)
{
for(int j=(i+1)*m-1;j>=i*m;j--)
{
node tmp=v[j];
if(j!=i*m)
{
v[j].next=v[j-1].id;
}
else
{
if(i!=d-1)
{
v[j].next=v[j+2*m-1].id;
}
else
{
if(yu==0)
{
v[j].next=-1;
}
else
{
v[j].next=v[j+m].id;
}
}
}
printf("%05d %d ",v[j].id,v[j].data);
if(v[j].next==-1)
{
printf("-1\n");
}
else
{
printf("%05d\n",v[j].next);
}
}
}
for(int i=d*m;i<v.size();i++)
{
printf("%05d %d ",v[i].id,v[i].data);
if(v[i].next==-1)
{
printf("-1\n");
}
else
{
printf("%05d\n",v[i].next);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: