2023年浙江大學計算機及軟體工程研究生機試真題

2021-07-10 21:09:56 字數 2937 閱讀 1412

題目描述:

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。

輸入:

輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點t。n和m為0時輸入結束。(1

輸出:

輸出 一行有兩個數, 最短距離及其花費。

樣例輸入:

3 2

1 2 5 6

2 3 4 5

1 30 0

樣例輸出:

9 11

注意:1.

有時候輸入資料中兩個點之間會有多條邊,由於我們只能選擇一條邊進行處理,所以輸入的時候進行一下去除重邊的操作: 如果有重邊並且兩個邊的距離不一樣就取小的,如果兩個邊的距離一樣,就選擇花費小的。

2、採用dijkstra演算法

#include#includeusing namespace std;

int cost[1005][1005],map[1005][1005];

const int inf=99999999;

int n,m;

void dijkstra(int start,int end)

visit[start]=1;//從起點開始表示起點已經被選中到集合s中 ,當所有的點都被選中到s中就算結束了

//開始依次尋找距離start起點最近的點v加入s集合中並進行中轉

for(int i=1;i<=n;i++)

else if(visit[j]!=1&&map[v][j]!=inf&&dis[j]==dis[v]+map[v][j])//如果j沒有加入s並且中轉後的距離一樣,那麼花費更新} }

cout<>n>>m&& (n||m))

} /*有時候輸入資料中兩個點之間會有多條邊,由於我們只能選擇一條邊進行處理,所以輸入的時候進行一下去除重邊的操作:

如果有重邊並且兩個邊的距離不一樣就取小的,如果兩個邊的距離一樣,就選擇花費小的。

*/ while(m--)

else if(map[a][b]==d)

}//輸入結束

cin>>begin>>end;

dijkstra(begin,end);

} return 0;

}

題目描述:

判斷兩序列是否為同一二叉搜尋樹序列

輸入:

開始乙個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。

接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。

接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。

輸出:

如果序列相同則輸出yes,否則輸出no

樣例輸入:

2

567432

543267

576342

0

樣例輸出:

yes

no

//解題思路:將每個序列構造成乙個二叉搜尋樹,然後給出前序遍歷(或者後序或者中序)的結果,如果結果一樣就是一顆二叉樹,否則不是一棵。

#include #include using namespace std;

struct node

};//插入有序樹

void insertsorttree(node * root, char data)

else if(p->dataright = q ;

return;}}

}//銷毀有序樹

void destroysorttree(node * root)

//建立有序樹

node * createsorttree(char * datas , int n)

return root ;

}//用到的變數

char x1[11];int ct1 = 0;

char x2[11];int ct2 = 0;

//前根序遍歷

void pre_lst(node * root,char* x,int &index)

//比較前根序列

bool cmp(int n)

return true ;

}int main()

{ int t ;

int n;

node * root1 = null;

node * root2 = null;

int index1 ,index2 ;

while(1){

cin>>t ;if(t==0)break;

cin>>x1 ;

ct1 = strlen(x1);

root1 = createsorttree(x1,ct1);

index1 = 0 ;

pre_lst(root1,x1,index1) ;

for(int i = 0 ; i < t ; i++ ){

cin>>x2 ;

ct2 = strlen(x2);

root2 = createsorttree(x2,ct2);

index2 = 0 ;

pre_lst(root2,x2,index2) ;

if(cmp(ct1)){

cout<<"yes"<

2023年浙江大學計算機及軟體工程研究生機試真題

題目描述 excel可以對一組紀錄按任意指定列排序。現請你編寫程式實現類似功能。對每個測試用例,首先輸出1行 case i 其中 i 是測試用例的編號 從1開始 隨後在 n 行中輸出按要求排序後的結果,即 當 c 1 時,按學號遞增排序 當 c 2時,按姓名的非遞減字典序排序 當 c 3 時,按成績...

2023年浙江大學計算機及軟體工程研究生機試真題

最大報銷額 將題目中數字都擴大100倍變成整數,就可看作經典的01揹包問題 設報銷額度為揹包上限,可報銷支票金額為 可報銷支票金額為重量 a存的既是 又是重量 include includeusing namespace std int a 32 存的既是 又是重量 const int max 30...

PAT 浙江大學計算機程式設計能力考試簡介

日期 2012 02 27 摘要 pat 浙江大學計算機程式設計能力考試簡介 宗 旨 浙江大學計算機程式設計能力考試 programming ability test,簡稱pat 是由浙江大學電腦科學與技術學院組織的統一考試,旨在培養和展現學生分析問題 解決問題和計算機程式設計的能力,科學評價計算機...