題目描述:
有乙個6*6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑:
1、只能沿上下左右四個方向移動
2、總代價是沒走一步的代價之和
3、每步(從a,b到c,d)的代價是c,d上的值與其在a,b上的狀態的乘積
4、初始狀態為1
每走一步,狀態按如下公式變化:(走這步的代價%4)+1。
輸入:
第一行有乙個正整數n,表示有n組資料。
每組資料一開始為6*6的矩陣,矩陣的值為大於等於1小於等於10的值,然後四個整數表示起始座標和終止座標。
輸出:
輸出最小代價。
樣例輸入:
11 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 要考慮一些一些特殊...