1 条题解
-
0
题意分析
题目要求编写程序构建特定规则的图。图的顶点由从 0 到 N - 1(N≤10000)的整数键标识,边分为前向边(标记为 F)和后向边(标记为 B)。程序从包含顶点 0、1、2、3 的初始图开始,依据文本文件中的命令序列进行图的构建与操作。每个命令由两个顶点键(index0 和 index1)和一个操作字符序列组成,操作字符如 f、b、k、<、= 分别对应不同功能,像创建或跟随边、打印节点键、赋值节点到数组以及比较节点等操作。输入是命令序列,以文件结束作为终止标志,输出则是按照要求在标准输出打印相关结果,且结果间无空行。
解题思路
数据结构定义:定义一个数据结构来存储图的顶点和边,例如可以使用邻接表来表示图,方便添加边和查找顶点的邻接关系;同时定义一个数组来存储节点,对应题目中的 v 数组,用于记录特定顶点的节点信息。
命令解析与执行:逐行读取输入文件中的命令,对每个命令进行解析。提取命令中的 index0、操作字符序列和 index1。从右向左依次执行操作字符序列中的操作,根据不同的操作字符执行相应逻辑。例如遇到 f,检查当前节点是否存在前向边,不存在则创建新顶点和前向边;遇到 b,同样处理后向边;遇到 k,打印当前节点的键;遇到 <,将当前节点赋值给数组中对应 index0 的位置;遇到 =,比较数组中 index0 位置的节点与目标节点,按要求打印结果。
输出处理:在执行命令过程中,按照题目要求将需要打印的结果输出到标准输出,确保每个打印从行首开始,且结果间无空行。
代码
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; char str[10100]; int v[10100]={0,1,2,3}; int main() { int i,strnum,end,start; while(scanf("%d%s%d",&end,str,&start)!=EOF) { strnum=strlen(str); start=v[start]; for(i=strnum-1;i>=0;i--) { if(str[i]=='f') { if(start&1)//判断奇偶 { start++; } else { start=start+3; } } else if(str[i]=='k') { printf("%d\n",start); } else if(str[i]=='b') { start=start-2; } else if(str[i]=='<') { v[end]=start; } else if(str[i]=='=') { if(v[end]==start) { printf("=\n"); } else printf("#\n"); } } } return 0; } ``` ```
- 1
信息
- ID
- 2886
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者