PAT考试重点真题选做

原文链接:http://blog.csdn.net/u013752052/article/details/52708470


因为PAT考试真题有100多道,这里选取我做过的一些题目作为样例,以供大家学习参考。

附件PAT.tar.gz中即为源码和注释,妈的狗日CSDN还不让传点小文件了还,

改为百度盘分享链接https://pan.baidu.com/s/1c2eaDt2,

万一垃圾度娘黑了资源,请务必在评论中回复指出,我一看到就会补种的。


./图论算法:

1003 无向图Dijkstra求最大最短路(图输入用邻接列表)注意详见正文.cpp

1013 无向图求连通数(图输入用邻接列表)注意详见正文.cpp

1018 无向图DFS求最短路(图输入用邻接列表)注意多个点权的路径操作和最终比较.cpp

1021 无向连通图求最长路径端点(图输入用邻接列表)注意详见正文.cpp

1030 无向图Dijkstra求双边权最短路(图输入用邻接列表)注意详见正文.cpp

1034 有向图求连通数(图输入用邻接列表)注意详见正文.cpp

1072.cpp

1076 有向图广搜起点可达点集(图输入用邻接列表)注意详见正文.cpp


./二叉树操作:

1020 二叉树构造(树输入用键值作中序和后序构造).cpp

1043 二叉树反转和遍历(树输入用键值作插入构造).cpp

1064 完全二叉树构造(树输入用键值作中序构造).cpp

1086 二叉树构造(树输入用键值作中序和后序构造)注意当中序遍历时入栈为先序且出栈为中序.cpp

1099 固定结构二叉树填充键值(树输入用行号作结点、行内是子点).cpp

1102 二叉树反转和遍历(树输入用行号作结点、行内是子点)注意需用父点字段找到根点.cpp


./树状图搜索:

1004 树状图广搜每层叶点计数(图输入用父点和子点列表).cpp

1053 树状图深搜路径点权求和(图输入用父点和子点列表)注意递减排序邻边保证输出顺序.cpp

1079 树状图广搜叶点求和(图输入用行号作父点、行内是子点).cpp

1090 树状图广搜叶点计数(图输入用位置作子点、数值是父点).cpp

1094 树状图广搜层点计数(图输入用父点和子点列表).cpp

1106 树状图广搜最短叶点(图输入用行号作父点,行内是子点列表).cpp



浙大PAT考试技巧要点:

1. 树状图:PAT 1090 1079 1094
通常题目的输入格式有所变化,特别是PAT 1079 1090非常恶心,
    《要通过多加练习实例熟悉各种格式!》
通常题目给图都不是二叉树而是多叉树,因此不适用struct Node { int left, right, parent; },
    应当改用struct Edg { int vtx, adj; }
通常题目要求都是结点深度,这实际上是广搜距离即dsts[],但要注意层深可能从1开始(例如POJ 1094),
    也可能因为题意隐式给出从0开始(例如POJ 1079 1090),《应当特别注意层深计数问题!》
通常题目内容都是层次遍历即广搜遍历,树图DAG可以不用vsts[],
BFS标准型:
queue<int> vq;
// svtx = 0;(可能为1,详见题设,注意只为树图特用)
InitSVtx(svtx);
vq.push(svtx);
while (! vq.empty()) {
    int v = vq.front(); vq.pop();
    // vsts[v] = 1;(注意只为树图特用)
    DscVtx(v);
    for (int i = 0; i < edgs[v].size(); i += 1) {
        int av = edgs[v][i].adj;
        // if (vsts[av] == 0) {(注意只为树图特用)
            TreeEdg(v, av);
   vq.push(av);
        // }
    }
}


2. 二叉树
通常题目的输入格式有所变化,《特别是PAT 1102需用父点字段找到根点》
通常都是四序遍历,注意xords.push_back(nd)和(nodes[nd].val)
注意PAT 1043实际考察二叉树的插入和反转操作,《提醒练习二叉树的基本增删查等操作》
注意PAT 1099 1102用固定结构和键值构造二叉树,
套路都是先求得结点的中序数组,再求得键值的排序数组,后对应位置赋等键值即可
注意PAT 1020 1086用中序和先序/后序构造二叉树,
套路都是先在先序/后序的开首/结尾找到根点键值,再在中序的中间找到根点位置,
则中序根点左右两侧为左右子树,用左右子树的结点个数可得其在先序/后序的前后半部位置,
后递归寻找前后子树区间,结束条件为区间为0


3. 图论算法
注意某些题目的结点序号从1开始,例如PAT 1013 1021,必须将NVTX_MAX设值增一,
同理段错误或异常退出通常都是NVTX_MAX不足够大引起

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值