Gym - 100989J -(DFS)
Posted bendandedaima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym - 100989J -(DFS)相关的知识,希望对你有一定的参考价值。
题目链接:http://codeforces.com/gym/100989/problem/J
Raihan is helping Maram and Master Hasan in the design of their graduation project. They have a panel that shows a list of the objects created by the user. Objects can be nested inside each other, the user can click the ‘-‘ sign to collapse the items nested inside an object, or click the ‘+‘ sign to expand the objects nested inside it.
Check the following table for more details:
Note that all objects are nested inside a list item called project.
For each object in the project, you are given a list of objects nested inside it and whether it’s expanded or collapsed. Can you help Raihan in drawing the panel?
Input
The first line of input contains an integer N (0?≤?N?≤?100), the number of objects in the project. Objects are numbered from 1 to N. The project item is item number 0.
Each of the following N?+?1 lines contains the description of an object. The ith(starting from 0) line describes the object number i in the following format:
S K A1 A2 ... AK
Where S is the state of the object (expanded or collapsed), where ‘-‘ means it‘s expanded and ‘+‘ means it‘s collapsed. The state of objects that do not have any nested objects will be ‘-‘.
K is the number of objects nested inside this object, this number is followed by Kdistinct numbers representing the numbers of the nested objects.
Output
Output the current state of the list, the items nested in an object should be listed in the given order.
An object inside another is nested by two spaces, the first space is replaced with ‘+‘ or ‘-‘ depending on the state of the object, if the object does not have other objects inside it, then keep the space.
Examples
6
- 3 2 5 1
+ 1 3
- 1 6
- 1 4
- 0
- 0
- 0
- project
- object2
object6
object5
+ object1
0
- 0
project
题意:按照给出的项目要求,输出对象列表。
思路:因为他是按照先后顺序的,如果打开一个(输出)对象,接下来输出的是该嵌套在该对象中的其他对象,一直往下,直到到嵌套的最后一个对象,再依次返回上一层对象。所以很容易想到要用DFS。
知道用DFS后这道题就不难了。注意一下输出格式,下面是代码。
1 #include<stdio.h> 2 #include<string.h> 3 char s[105]; 4 int father[105];//指project的子孩子有哪些 5 int child[105][105];//child[i][j]指对象i的第j个child; 6 int child_number[105];//child_number[i]指对象i的孩子有多少个 7 void DFS(char s1,int childs,int i,int w)//(是‘+‘还是‘-‘,孩子数,下标,缩放第几层次) 8 { 9 for(int q=0;q<w;q++) 10 printf(" "); 11 if(childs==0) 12 { 13 printf(" object%d ",i); 14 return ; 15 } 16 else 17 { 18 printf("%c ",s1); 19 printf("object%d ",i); 20 if(s1==‘-‘) 21 { 22 for(int j=1;j<=childs;j++) 23 { 24 DFS(s[child[i][j]],child_number[child[i][j]],child[i][j],w+1); 25 } 26 } 27 } 28 } 29 int main() 30 { 31 int N; 32 while (scanf("%d",&N)!=EOF) 33 { 34 getchar(); 35 memset(child,0,sizeof(child)); 36 char s0;int k; 37 scanf("%c%d",&s0,&k); 38 for(int i=1;i<=k;i++) 39 scanf("%d",&father[i]); 40 for(int i=1;i<=N;i++) 41 { 42 getchar(); 43 scanf("%c%d",&s[i],&child_number[i]); 44 for(int j=1;j<=child_number[i];j++) 45 scanf("%d",&child[i][j]); 46 } 47 if(N==0) 48 { 49 printf(" project "); 50 } 51 else 52 { 53 if(s0==‘+‘) 54 printf("%c project ",s0); 55 else 56 { 57 printf("%c project ",s0); 58 for(int i=1;i<=k;i++) 59 { 60 DFS(s[father[i]],child_number[father[i]],father[i],1); 61 } 62 } 63 } 64 } 65 return 0; 66 }
以上是关于Gym - 100989J -(DFS)的主要内容,如果未能解决你的问题,请参考以下文章
OpenAI Gym 入门与提高 Gym环境构建与最简单的RL agent
强化学习 平台 openAI 的 gym 安装 (Ubuntu环境下如何安装Python的gym模块)
2016 USP-ICMC-Codeforces-Gym101063C-Sleep Buddies Gym101063F-Bandejao Gym101063J-The Keys