【PAT】PAT甲级题型分类整理

最短路径

  1. Emergency (25)-PAT甲级真题(Dijkstra算法)
  2. Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS)
  3. Travel Plan (30)-PAT甲级真题(Dijkstra + DFS,输出路径,边权)
  4. All Roads Lead to Rome (30)-PAT甲级真题-Dijkstra + DFS
  5. Online Map (30)-PAT甲级真题(Dijkstra + DFS)

最短路径扩展问题

  • 要求数最短路径有多少条
    • count[s] = 1;
    • 如果找到更短路:count[W]=count[V];
    • 如果找到等长路:count[W]+=count[V];
  • 要求边数最少的最短路

    • count[s] = 0;
    • 如果找到更短路:count[W]=count[V]+1;
    • 如果找到等长路:count[W]=count[V]+1;
  • 存在点权

    比如救火问题,多条最短路径,选择点权最大的那条

    for(int i = 0; i < n; i++) {
      int u = -1, minn = inf;
      for(int j = 0; j < n; j++) {
          if(visit[j] == false && dis[j] < minn) {
              u = j;
              minn = dis[j];
          }
      }
      if(u == -1) break;
      visit[u] = true;
      for(int v = 0; v < n; v++) {
          if(visit[v] == false && e[u][v] != inf) {
              if(dis[u] + e[u][v] < dis[v]) {
                  dis[v] = dis[u] + e[u][v];
                  num[v] = num[u];
                  w[v] = w[u] + weight[v];
              } else if(dis[u] + e[u][v] == dis[v]) {
                  num[v] = num[v] + num[u];
                  if(w[u] + weight[v] > w[v])
                      w[v] = w[u] + weight[v];
              }
          }
      }
    }
  • 边权不唯一

    比如旅游规划问题,存在多条最短路径时,选择花费最少的

    void Dijkstra( Vertex s ) {
      while (1) {
          V = 未收录顶点中dist最小者;
          if ( 这样的V不存在)
              break;
          collected[V] = true;
          for ( V 的每个邻接点W )
              if ( collected[W] == false )
                  if ( dist[V]+E < dist[W] ) {
                      dist[W] = dist[V] + E ;
                      path[W] = V;
                      cost[W] = cost[V] + C ;
                  } else if ( (dist[V]+E == dist[W])
                              && (cost[V]+C < cost[W]) ) {
                      cost[W] = cost[V] + C ;
                      path[W] = V;
                  }
      }
    }

树的遍历

  1. Counting Leaves (30)-PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
  2. Tree Traversals (25)-PAT甲级真题
  3. Path of Equal Weight (30)-PAT甲级真题(树的遍历)
  4. Total Sales of Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
  5. Tree Traversals Again (25)-PAT甲级真题
  6. Highest Price in Supply Chain (25)-PAT甲级真题
  7. The Largest Generation (25)-PAT甲级真题(bfs,dfs,树的遍历)
  8. Invert a Binary Tree (25)-PAT甲级真题
  9. Lowest Price in Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
  10. Counting Nodes in a BST (30)-PAT甲级真题(二叉树的遍历,dfs)
  11. Pre- and Post-order Traversals (30)-PAT甲级真题(前序后序转中序)

图的遍历

  1. Battle Over Cities (25)-PAT甲级真题(图的遍历,统计强连通分量的个数,dfs)
  2. Deepest Root (25)-PAT甲级真题(图的遍历,dfs,连通分量的个数)
  3. Head of a Gang (30)-PAT甲级真题(图的遍历dfs)
  4. Gas Station (30)-PAT甲级真题(Dijkstra)
  5. Forwards on Weibo (30)-PAT甲级真题(图的遍历bfs)

深度优先搜索

  1. Integer Factorization (30)-PAT甲级真题(dfs深度优先)

广度优先搜索

  1. Acute Stroke (30)-PAT甲级真题(广度优先搜索)

哈希、散列

  1. Find Coins (25)-PAT甲级真题(Hash散列)
  2. String Subtraction (20)-PAT甲级真题(哈希)
  3. To Buy or Not to Buy (20)-PAT甲级真题
  4. Broken Keyboard (20)-PAT甲级试题

动态规划

  1. Maximum Subsequence Sum (25)-PAT甲级真题(动态规划dp)
  2. Longest Symmetric String (25)-PAT甲级真题(动态规划)
  3. Favorite Color Stripe (30)-PAT甲级真题
  4. Find More Coins (30)-PAT甲级真题(01背包)

排序

  1. The Best Rank (25)-PAT甲级真题
  2. Phone Bills (25)-PAT甲级真题
  3. PAT Ranking (25)-PAT甲级真题
  4. List Sorting (25)-PAT甲级真题
  5. The World’s Richest (25)-PAT甲级真题
  6. Talent and Virtue (25)-PAT甲级真题
  7. PAT Judge (25)-PAT甲级真题
  8. Graduate Admission (30)-PAT甲级真题
  9. List Grades (25)-PAT甲级真题

STL的使用

  1. Digital Library (30)-PAT甲级真题(map映射)
  2. Course List for Student (25)-PAT甲级真题
  3. Student List for Course (25)-PAT甲级真题
  4. The Dominant Color (20)-PAT甲级真题
  5. Set Similarity (25)-PAT甲级真题
  6. Speech Patterns (25)-PAT甲级真题(map应用)
  7. Mars Numbers (20)-PAT甲级真题

链表处理

  1. Sharing (25)-PAT甲级真题
  2. Linked List Sorting (25)-PAT甲级真题
  3. Reversing Linked List (25)-PAT甲级真题
  4. Deduplication on a Linked List (25)-PAT甲级真题

大整数

  1. Have Fun with Numbers (20)-PAT甲级真题(大整数运算)
  2. Palindromic Number (25)-PAT甲级真题(大整数相加)

二叉搜索树

  1. Is It a Binary Search Tree (25)-PAT甲级真题
    Complete Binary Search Tree (30)-PAT甲级真题
  2. Build A Binary Search Tree (30)-PAT甲级真题

平衡二叉树

  1. Root of AVL Tree (25)-PAT甲级真题

堆排序

  1. Insertion or Heap Sort (25)-PAT甲级真题(堆排序)

贪心算法

  1. To Fill or Not to Fill (25)-PAT甲级真题(贪心算法)
  2. Magic Coupon (25)-PAT甲级真题(贪心算法)
  3. Recover the Smallest Number (30)-PAT甲级真题(贪心算法)
  4. Sort with Swap(0,*) (25)-PAT甲级真题(贪心算法)
  5. Mooncake (25)-PAT甲级真题

并查集

  1. Social Clusters (30)-PAT甲级真题(并查集)
  2. Family Property (25)-PAT甲级真题(并查集)
  3. Birds in Forest (25)-PAT甲级真题(并查集)

树状数组

  1. Stack (30)-PAT甲级真题(树状数组)

原文出处:
作者:柳婼
链接:https://www.liuchuo.net/archives/2502

以下内容作为补充
线性结构:数组,栈,队列看一下就过了;
链表自己实现了一遍;
常见排序理解并会写。
树:二叉搜索树熟练(尤其是各种遍历);AVL树和红黑树尽力理解了一下,我是真的记不住……
图:BFS, DFS, 最短路(dijkstra, spfa, floyd)。这里的题目最常见,要能写得很灵活。
其它:堆,背包问题(良心教程 https://github.com/tianyicui/pack/blob/master/V2.pdf),贪心问题, KMP(还没遇到过题目)。

你可能感兴趣的:(【PAT】PAT甲级题型分类整理)