2023年上海交通大學計算機研究生機試真題

2021-07-11 01:28:30 字數 1541 閱讀 7995

題目描述:

有乙個6*6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑:

1、只能沿上下左右四個方向移動

2、總代價是沒走一步的代價之和

3、每步(從a,b到c,d)的代價是c,d上的值與其在a,b上的狀態的乘積

4、初始狀態為1

每走一步,狀態按如下公式變化:(走這步的代價%4)+1。

輸入:

第一行有乙個正整數n,表示有n組資料。

每組資料一開始為6*6的矩陣,矩陣的值為大於等於1小於等於10的值,然後四個整數表示起始座標和終止座標。

輸出:

輸出最小代價。

樣例輸入:

1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

0 0 5 5

樣例輸出:

23

演算法分析:dfs演算法。

#include#includeusing namespace std;

int p,q,mins; //(p,q)是終止座標

int a[51][51],state ,book[51][51];//a陣列儲存每個位置的值,state儲存每個位置的狀態,book表示是否訪問過

int next[4][2]=,//向右

,//向下

,//向左

};//向上

void dfs(int x,int y,int state,int cost)//dfs的作用是用來處理當前這一步怎麼走

} }int main()

{ int i,j,startx,starty,n;//startx,starty是開始座標

//freopen("datain.txt","r",stdin);

//freopen("dataout.txt","w",stdout);

cin>>n;

while(n--)

{ memset(book,0,sizeof(book));

mins=999999;

//當i從1-6結果就不對,從0-5就可以,因為終止迴圈條件if(x==p&&y==q)是x,y變化後剛剛到p,q,

//在p,q位置的處理並沒有進行,如果i從1-6那麼終止條件就要變化

for(i=0;i<6;i++)

for(j=0;j<6;j++)

cin>>a[i][j];//用二維陣列儲存矩陣的值

cin>>startx>>starty>>p>>q;

//book[startx][starty]=1;//標記起點防止重複走,但是保留這個語句的時候卻是wa.

dfs(startx,starty,1,0);

cout<

2023年上海交通大學計算機研究生機試真題

題目描述 對於乙個字串,將其字尾子串進行排序,例如grain 其子串有 grain rain ain in n 然後對各子串按字典順序排序,即 ain,grain,in,n,rain 輸入 每個案例為一行字串。輸出 將子串排序輸出 樣例輸入 grain 樣例輸出 ain graininn rain ...

上海交通大學計算機研究生復試題 回文數

問題 c 回文數 時間限制 1 sec 記憶體限制 128 mb 題目描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 s...

西安交通大學 計算機程式設計(C )期末程式設計題

include includeusing namespace std string nixu string a int k len 2 string b int j k 1 for int i 0 i a int len 0 while a len 0 if len 1 cout 要考慮一些一些特殊...