タイトル1524:複雑なチェーンテーブルのコピー-9度
2120 ワード
タイトルの説明:
複雑なチェーンテーブル(各ノードにノード値と2つのポインタがあり、1つは次のノードを指し、もう1つの特殊なポインタはいずれかのノードを指します)を入力します.
入力:
入力には複数のテストサンプルが含まれ、入力はEOFで終了します.
各テストケースについて、入力される第1の動作の整数n(1<=n<=1000):nは、入力するチェーンテーブル要素の個数を表す.(ノード番号は1から).
チェーンテーブルノードの値を表すn個の数が続く.
次にn個の数Tiがあり,Tiはi番目のノードの別のポインタ指向を表す.
Ti=0はこのポインタがNULLであることを示す.
出力:
各テストケースに対応し、
出力n行、各行に2つの数があり、1つ目は現在のノード値、2つ目は現在のノードの特殊なポインタの値を表す.
サンプル入力:
5
1 2 3 4 5
3 5 0 2 0
サンプル出力:
1 3
2 5
3 0
4 2
5 0
推奨指数:※※
ソース:http://ac.jobdu.com/problem.php?pid=1524
この問題はOJの観点から言えば、問題そのものの意味を失う.
タイトルの鍵はチェーンテーブルをコピーするときに任意のポインタがあることです.任意のポインタの処理については、ソースチェーンテーブルの各ノードの後ろにノードを挿入し、値をコピーすることができます.ソースチェーンテーブルの各任意のポインタが処理されると、新しいノードでは、元の任意のポインタの後ろのノードを指します.(主な関数:)詳細は海涛のブログを参照してください:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/
複雑なチェーンテーブル(各ノードにノード値と2つのポインタがあり、1つは次のノードを指し、もう1つの特殊なポインタはいずれかのノードを指します)を入力します.
入力:
入力には複数のテストサンプルが含まれ、入力はEOFで終了します.
各テストケースについて、入力される第1の動作の整数n(1<=n<=1000):nは、入力するチェーンテーブル要素の個数を表す.(ノード番号は1から).
チェーンテーブルノードの値を表すn個の数が続く.
次にn個の数Tiがあり,Tiはi番目のノードの別のポインタ指向を表す.
Ti=0はこのポインタがNULLであることを示す.
出力:
各テストケースに対応し、
出力n行、各行に2つの数があり、1つ目は現在のノード値、2つ目は現在のノードの特殊なポインタの値を表す.
サンプル入力:
5
1 2 3 4 5
3 5 0 2 0
サンプル出力:
1 3
2 5
3 0
4 2
5 0
推奨指数:※※
ソース:http://ac.jobdu.com/problem.php?pid=1524
この問題はOJの観点から言えば、問題そのものの意味を失う.
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF){
int *link=new int [n+1];
int *r=new int [n+1];
for(i=1;i<=n;i++)
scanf("%d",&link[i]);
for(i=1;i<=n;i++)
scanf("%d",&r[i]);
for(i=1;i<=n;i++){
printf("%d %d
",link[i],r[i]>0?link[r[i]]:0);
}
}
return 0;
}
タイトルの鍵はチェーンテーブルをコピーするときに任意のポインタがあることです.任意のポインタの処理については、ソースチェーンテーブルの各ノードの後ろにノードを挿入し、値をコピーすることができます.ソースチェーンテーブルの各任意のポインタが処理されると、新しいノードでは、元の任意のポインタの後ろのノードを指します.(主な関数:)詳細は海涛のブログを参照してください:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/
typedef struct node{
int val;
node *next;
node *rnext;
}node;
bool copy_link(node* link,node *cp){
if(link==NULL)
return false;
node *p=link;
while(p!=NULL){
node *q=p->next;
node *c=new node;
p->next=c;
c->next=q;
p=p->next;
}
p=link;
while(p!=NULL){
node *q=p->next;
q->val=p->val;
q->rnext=p->rnext->next;
p=p->next;
}
p=link;
cp=link->next;
while(p!=NULL){
node *q=p->next;
p->next=p->next->next;
p=q->next;
q->next=q->next->next;
}
return true;
}