1 条题解

  • 0
    @ 2025-5-22 19:39:36

    题意分析​

    题目要求编写程序构建特定规则的图。图的顶点由从 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
    上传者