数据结构与算法题目集(中文)
PAT网站
懒狗的救赎
HUMBLE.
展开
-
7-25 朋友圈 (25 分)【并查集】
#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define MANV 30005int 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 · 170 阅读 · 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 · 239 阅读 · 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 · 126 阅读 · 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 · 143 阅读 · 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 · 120 阅读 · 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 · 653 阅读 · 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 · 253 阅读 · 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 · 212 阅读 · 0 评论 -
7-11 关键活动 (30 分)
思路:拓扑排序+关键路径不知道为什么,和ac过的代码结果一致,但过不去。我怀疑是顺序的问题代码:#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define MAXN 105#define INF 1e9int G[MAXN][MAXN],n;int path[MAXN];int ve[MAXN]={0};int vl[MAXN];原创 2021-04-21 17:51:48 · 164 阅读 · 0 评论 -
7-10 公路村村通 (30 分)【最小生成树Prim算法】
#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define MAXN 1005#define INF 1e9int 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 · 244 阅读 · 0 评论 -
7-9 旅游规划 (25 分)
#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define MAXN 505#define INF 1e9int 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 · 185 阅读 · 0 评论 -
7-8 哈利·波特的考试 (25 分)
思路:一开始根本没看懂题目,看了其他代码后才知道。首先通过Floyd算法求得任意两个结点之间的最短距离。对于某个结点,遍历其与其他结点的最大距离,得到该结点到其他结点的最大最短路径。求得所有结点的最大最短路径。(找到最难变的那种动物)在所有的最大最短路径中找到最小值即为解。(魔咒最短)代码:#include <iostream>#include <algorithm>using namespace std;#define MAXN 105#define I原创 2021-04-20 10:09:54 · 138 阅读 · 0 评论 -
7-7 六度空间 (30 分)
思路:对每个顶点使用BFS的方法记录当前原点到其他点的距离代码:#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define INF 1e9#define MAXN 1005int G[MAXN][MAXN]={0};int vis[MAXN]={0};int dist[MAXN];int BFS(int v,int n){ in原创 2021-04-19 16:55:29 · 314 阅读 · 0 评论 -
7-6 列出连通集 (25 分)
#include <iostream>#include <algorithm>#include <cstring>using namespace std;#define MAXN 10int 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 · 97 阅读 · 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 · 136 阅读 · 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 · 98 阅读 · 0 评论 -
7-3 树的同构 (25 分)
思路:https://www.cnblogs.com/yuxiaoba/p/8329986.html代码:#include <iostream>#define Tree intusing 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 · 110 阅读 · 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 · 81 阅读 · 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 · 76 阅读 · 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 · 158 阅读 · 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 · 93 阅读 · 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 · 108 阅读 · 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 · 119 阅读 · 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 · 149 阅读 · 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 · 116 阅读 · 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 · 195 阅读 · 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 · 219 阅读 · 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 · 112 阅读 · 0 评论