C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...
C語言踩石頭過河問題,用DFS搜索遞歸了17萬次但是沒報錯,請問是什么原因?
這是原題目,后面附上我的代碼,剛剛接觸DFS,不是很熟練,求教育……謝謝!!!TUT
這是題目,我大概概括一下
用'※'和'.'組成如圖所示的矩陣字符串,'※'是石頭,'.'是河水,過河只能踩著石頭過,而且必須是你所在的石頭的下一豎列的正前方或者最近的兩個斜對角的石頭,用example里那種縱向數(shù)字表示石頭的標號,求出一個過河的路線,打印出路線經過的石頭的標號
int j=0;
char Q[80];
int x=0,y=0,res=0;
char river[5][11],visited[5][11];
void dfs(y,x){
Q[x]=y; //儲存每一步落腳石縱向坐標的數(shù)組
visited[x][y]=1;
int dx=1;
for (int dy=-1; dy<=1; dy++) {
int ny=y+dy,nx=x+dx;
//如果nx\ny在河的范圍內,是石頭,而且沒有被訪問過,就遞歸
if (nx>=0 && nx<11 && ny>=0 && ny<5 && river[ny][nx]=='*' && visited[ny][nx]==0) {
dfs(ny, nx);
}
}
//如果沒有合適的落腳石,而且當前在第一豎列,就向下繼續(xù)尋找第一豎列未被訪問的石頭,找不到就結束dfs函數(shù)
if (x==0) {
for (j=y+1; !strchr(&river[j][0], '*')&&visited[j][0]!=0&&j<5; j++);
if (j<5) {
dfs(j, 0);
}else return;
}
//如果沒有合適的落腳石,且不在第一豎列,就返回上一塊落腳石重新選擇
dfs(Q[x-1], x-1);
return;
}
int main(){
for (int m=0; m<11; m++) {
for (int n=0; n<5; n++) {
visited[n][m]=0;
}
}
//輸入五行字符
for (j=0; j<5; j++) {
printf("請輸入第%d行",j+1);
gets(river[j]);
}
//找到第一豎列第一個'*'
for (j=0; j<5; j++) {
if(strchr(&river[j][0], '*'))
break;
}
dfs(j,0);
if (strlen(Q)==11) {
//打印函數(shù)求得的數(shù)組
for (int i=0; i
printf("%d",Q[i]);
}
}
else{
printf("no solution");
}
return 0;
}
相關閱讀:
求類似于百度統(tǒng)計里選擇時間的控件。
iOS程序怎么使用自定義字體
node的fs模塊,可讀流讀不到中文數(shù)據(jù),求教
做 HTML5頁面時怎么判斷手機軟鍵盤是否隱藏?
判斷兩個二叉樹是否互相對稱(互為鏡像)
CPP struct 的詭異問題
【求助】怎么在頁面中直接調用非凡影音?
php和websocket怎么建立連接
請問 IOS 或 Android 開發(fā)中有向網頁那樣的前端框架,后端框架嗎?
CSS3動畫延時的一點疑問
Linux下大小寫切換有延遲,延遲1~3秒
oracle數(shù)據(jù)存儲過程
HTTP請求響應時間過長
現(xiàn)在我在學習MySQL,問問怎么復制粘貼數(shù)據(jù)庫.
java對于對象鎖是如何管理的?
在angular中用懶加載的方式引入highcharts插件并使用,出現(xiàn)錯誤。
fragement用fragmentmanger,fragmenttransaction添加到activity碰到問題
jquery動態(tài)each
sf編輯時代碼如何顯示行號?
實現(xiàn)forEach的問題?
總結
以上是生活随笔為你收集整理的C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下列不是c语言浮点常量的是,C语言二级题
- 下一篇: C语言不使用结构体实现链表,不用指针链表