数据结构与算法题目集(中文)
PAT网站
懒狗的救赎
HUMBLE.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
7-25 朋友圈 (25 分)【并查集】
#include <iostream> #include <cstring> #include <algorithm> using namespace std; #define MANV 30005 int parent[MANV]; int find(int x){ if(parent[x]==x) return x; else{ parent[x]=find(parent[x]); return par原创 2021-04-25 17:35:28 · 213 阅读 · 0 评论 -
7-24 树种统计 (25 分)
AC代码: #include <iostream> #include <cstring> #include <algorithm> #include <map> using namespace std; int main(){ int n; cin>>n; cin.get(); string c; map<string,int> TIME; for(int i=0;i<n;i++原创 2021-04-25 11:58:23 · 299 阅读 · 0 评论 -
7-23 还原二叉树 (25 分)
方法一: #include <iostream> #include <cstring> #include <algorithm> using namespace std; char pre[51],in[51]; int n; int fun(int t,int low,int high){ if(low>=high) return 1; else { int mid=0; for(int i=low原创 2021-04-25 11:15:56 · 174 阅读 · 0 评论 -
7-22 堆栈模拟队列 (25 分)
#include <iostream> #include <cstring> #include <algorithm> #include <stack> using namespace std; int main(){ int n1,n2,t; cin>>n1>>n2; if(n1>n2) swap(n1,n2); n1--; n2--; int s1[100],t原创 2021-04-24 20:48:19 · 183 阅读 · 0 评论 -
7-21 求前缀表达式的值 (25 分)
#include <iostream> #include <cstring> #include <algorithm> #include <stack> using namespace std; int main(){ char a[31]; cin.getline(a,31); stack<double> num; stack<char> sym; int len=strlen(a);原创 2021-04-24 13:13:56 · 160 阅读 · 0 评论 -
7-20 表达式转换 (25 分)【测试点说明】
代码: #include <iostream> #include <cstring> #include <algorithm> #include <stack> using namespace std; int level(char c){ if(c=='+'||c=='-') return 1; else return 2; } int main(){ char a[21]; cin>原创 2021-04-24 10:46:57 · 756 阅读 · 0 评论 -
7-17 汉诺塔的非递归实现 (25 分)
#include <iostream> #include <cstring> #include <algorithm> using namespace std; void fun(int n,char a,char b,char c){ if(n==1){ printf("%c -> %c\n",a,c); } else{ fun(n-1,a,c,b); printf("%c -> %c原创 2021-04-23 14:25:13 · 322 阅读 · 0 评论 -
7-14 电话聊天狂人 (25 分)
#include <iostream> #include <cstring> #include <algorithm> #include <map> using namespace std; int main(){ int n; cin>>n; map<string,int> TIME; string a,b,c; for(int i=0;i<n;i++){ cin>原创 2021-04-23 10:39:59 · 348 阅读 · 0 评论 -
7-11 关键活动 (30 分)
思路: 拓扑排序+关键路径 不知道为什么,和ac过的代码结果一致,但过不去。我怀疑是顺序的问题 代码: #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define MAXN 105 #define INF 1e9 int G[MAXN][MAXN],n; int path[MAXN]; int ve[MAXN]={0}; int vl[MAXN];原创 2021-04-21 17:51:48 · 222 阅读 · 0 评论 -
7-10 公路村村通 (30 分)【最小生成树Prim算法】
#include <iostream> #include <cstring> #include <algorithm> using namespace std; #define MAXN 1005 #define INF 1e9 int G[MAXN][MAXN],n; int cost[MAXN]; //元素为-1,表示已访问;为0表示成本为0(起始点) void Initialize(){ for(int i=1;i<=n;i++){原创 2021-04-20 15:54:58 · 304 阅读 · 0 评论 -
7-9 旅游规划 (25 分)
#include <iostream> #include <cstring> #include <algorithm> using namespace std; #define MAXN 505 #define INF 1e9 int G[MAXN][MAXN]={0},P[MAXN][MAXN]={0},n; int dist[MAXN]={0}; int vis[MAXN]={0}; int cost[MAXN]; void create(){ for(i原创 2021-04-20 14:17:00 · 232 阅读 · 0 评论 -
7-8 哈利·波特的考试 (25 分)
思路: 一开始根本没看懂题目,看了其他代码后才知道。 首先通过Floyd算法求得任意两个结点之间的最短距离。 对于某个结点,遍历其与其他结点的最大距离,得到该结点到其他结点的最大最短路径。 求得所有结点的最大最短路径。(找到最难变的那种动物) 在所有的最大最短路径中找到最小值即为解。(魔咒最短) 代码: #include <iostream> #include <algorithm> using namespace std; #define MAXN 105 #define I原创 2021-04-20 10:09:54 · 185 阅读 · 0 评论 -
7-7 六度空间 (30 分)
思路: 对每个顶点使用BFS的方法记录当前原点到其他点的距离 代码: #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define INF 1e9 #define MAXN 1005 int G[MAXN][MAXN]={0}; int vis[MAXN]={0}; int dist[MAXN]; int BFS(int v,int n){ in原创 2021-04-19 16:55:29 · 374 阅读 · 0 评论 -
7-6 列出连通集 (25 分)
#include <iostream> #include <algorithm> #include <cstring> using namespace std; #define MAXN 10 int G[MAXN][MAXN]={0},n; int vis[MAXN]={0}; void DFS(int v){ vis[v]=1; cout<<v<<" "; for(int i=0;i<n;i++){原创 2021-04-19 14:00:57 · 138 阅读 · 0 评论 -
7-5 堆中的路径 (25 分)
小根堆结点的插入: #include <iostream> #include <algorithm> using namespace std; void UpAdjus(int *a,int n){ int temp=a[n],i; // cout<<temp<<endl; for(i=n;temp<a[i/2]&&i>1;i/=2){ a[i]=a[i/2]; } a[i]=原创 2021-04-19 13:24:02 · 183 阅读 · 0 评论 -
7-4 是否同一棵二叉搜索树 (25 分)
#include <iostream> #include <algorithm> using namespace std; typedef struct TreeNode{ struct TreeNode *left,*right; int data; }TreeNode, *Tree; Tree insert(Tree T,int x){ if(T==NULL){ T=(Tree)malloc(sizeof(struct TreeNode原创 2021-04-19 12:21:48 · 144 阅读 · 0 评论 -
7-3 树的同构 (25 分)
思路: https://www.cnblogs.com/yuxiaoba/p/8329986.html 代码: #include <iostream> #define Tree int using namespace std; typedef struct TreeNode{ Tree left,right; char data; }TreeNode; TreeNode T1[10],T2[10]; Tree BuildTree(struct TreeNode T[]){原创 2021-04-19 11:46:50 · 151 阅读 · 0 评论 -
7-2 一元多项式的乘法与加法运算 (20 分)
#include <iostream> #include <stack> #include <map> #include <algorithm> using namespace std; typedef struct{ int n,x; }num; bool cmp(num a,num b){ if(a.x>b.x) return 1; return 0; } int main(){ int an[200原创 2021-04-18 16:29:02 · 129 阅读 · 0 评论 -
7-1 最大子列和问题 (20 分)
#include <iostream> #include <algorithm> using namespace std; int a[100005]; int dp[100005]; int fun(int n){ if(n==0) return a[0]; else{ return max(fun(n-1)+a[n],a[n]); } } int main(){ int n; cin>>n;原创 2021-04-18 11:37:31 · 116 阅读 · 0 评论 -
6-12 二叉搜索树的操作集 (30 分)
插入代码A: BinTree Insert( BinTree BST, ElementType X ){ BinTree p=BST,pre=NULL; BinTree q=(BinTree)malloc(sizeof (struct TNode)); q->Data=X; q->Left=q->Right=NULL; if(BST==NULL) BST=q; else{ while(p){原创 2021-04-13 14:31:40 · 208 阅读 · 0 评论 -
6-10 二分查找 (20 分)
Position BinarySearch( List L, ElementType X ){ int head=1,end=L->Last,mid; while(head<=end){ mid=(head+end)/2; if(L->Data[mid]==X){ return mid; } else if(L->Data[mid]>X){ end=m原创 2021-04-13 11:30:11 · 146 阅读 · 0 评论 -
6-9 二叉树的遍历 (25 分)
void InorderTraversal( BinTree BT ){ if(BT){ InorderTraversal(BT->Left); printf(" %c",BT->Data); InorderTraversal(BT->Right); } } void PreorderTraversal( BinTree BT ){ if(BT){ printf(" %c",BT->Data);原创 2021-04-13 11:20:35 · 156 阅读 · 0 评论 -
6-8 求二叉树高度 (20 分)
int GetHeight( BinTree BT ){ if(!BT) return 0; else{ int h1=GetHeight(BT->Left); int h2=GetHeight(BT->Right); return h1>h2?h1+1:h2+1; } }原创 2021-04-13 10:45:13 · 154 阅读 · 0 评论 -
6-7 在一个数组中实现两个堆栈 (20 分)
Stack CreateStack( int MaxSize ){ Stack s=(Stack)malloc(sizeof(struct SNode)); s->Data= (int *)malloc(MaxSize*sizeof(int)); s->MaxSize=MaxSize; s->Top1=-1; s->Top2=MaxSize; return s; } bool Push( Stack S, ElementType X,原创 2021-04-12 20:00:53 · 186 阅读 · 0 评论 -
6-6 带头结点的链式表操作集 (20 分)
List MakeEmpty(){ List L=(List)malloc(sizeof(struct LNode)); L->Next=NULL; return L; } Position Find( List L, ElementType X ){ List p=L->Next; while(p){ if(p->Data==X){ return p; } p=p->N原创 2021-04-12 19:22:15 · 161 阅读 · 0 评论 -
6-5 链式表操作集 (20 分)
Position Find( List L, ElementType X ){ List p=L; while(p){ if(p->Data==X) break; p=p->Next; } if(!p) return ERROR; else return p; } List Insert( List L, ElementType X, Position P ){原创 2021-04-12 15:20:54 · 262 阅读 · 0 评论 -
6-2 顺序表操作集 (20 分)
List MakeEmpty(){ List L=(List)malloc(sizeof(struct LNode)); //malloc来创建 memset(L->Data,0,sizeof(L->Data)); L->Last=-1; return L; } Position Find( List L, ElementType X ){ for(int i=0;i<=L->Last;i++){ if(L->D原创 2021-04-11 19:23:41 · 260 阅读 · 0 评论 -
6-1 单链表逆转 (20 分)
List Reverse( List L ){ List q,p=L; L=NULL; while(p){ q=p; p=p->Next; q->Next=L; L=q; } return L; }原创 2021-04-11 18:28:41 · 161 阅读 · 0 评论
分享