描述
乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門(n<=5),它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個門所需的所有鑰匙(每個門都至少有一把鑰匙),例如:現在a門有三把鑰匙,acm就必須找全三把鑰匙才能開啟a門。現在請你編寫乙個程式來告訴acm,他能不能順利的得到寶藏。
輸入
輸入可能會有多組測試資料(不超過10組)。
每組測試資料的第一行包含了兩個整數m,n(1
輸出每行輸出乙個yes表示acm能找到寶藏,輸出no表示acm找不到寶藏。
深搜法
#include
#include
void fun(int,int);
char arr[25][25];
int arr1[25][25],flag,m,n;
int a,b,c,d,e,a1,b1,c1,d1,e1;
int main()
}getchar(); //消除回車
}fun(m1,n1);
if(flag==1)
printf("yes\n");
else
printf("no\n");
} return 0;
}void fun(int x,int y)
int tx,ty;
//定義四個方向座標 下 左 上 右
int next[4][2]=,,,};
for(int i=0;i<4;i++)
else if(arr[tx][ty]=='b'&&b
else if(arr[tx][ty]=='c'&&c
else if(arr[tx][ty]=='d'&&d
else if(arr[tx][ty]=='e'&&e
// 遇到鑰匙把鑰匙拿走,並且把鑰匙變為路
else if(arr[tx][ty]=='a')
else if(arr[tx][ty]=='b')
else if(arr[tx][ty]=='c')
else if(arr[tx][ty]=='d')
else if(arr[tx][ty]=='e')
//走過的座標進行標記
arr1[tx][ty]=1;
//進行下一次嘗試
fun(tx,ty);
//若flag=1,說明已經找到寶藏,則直接返回,不用進行其他嘗試
即剪枝操作,提高效率
if(flag==1)
return;
//取消標記
arr1[tx][ty]=0;
}}
廣搜法
#include
#include
char arr[30][30];
int arr1[30][30],a,a1,b,b1,c,c1,d,d1,e,e1;
int m,n,flag;
int judge();
void dfs(int,int);
struct node
s[500];
int main()
}getchar();
}dfs(m1,n1);
while(judge()==0&&flag==0)//所有可以去的地方遍歷一遍後判斷是否有可以開啟的門
dfs(s[0].x,s[0].y);
}if(flag==1)
if(flag==0)
}return 0;
}// 判斷是否有能到達且能開啟的門
int judge()}}
}if(b>=b1&&b1!=0)}}
}if(c>=c1&&c1!=0)}}
}if(d>=d1&&d1!=0)}}
}if(e>=e1&&e1!=0)}}
}return 1;
}void dfs(int px,int py)
,,,},i,j;
int end=1,head=1,tx,ty;//head和end分別為佇列頭和尾
s[end].x=px;//當前位置入佇列
s[end].y=py;
arr1[px][py]=1;//對走過的地方標記
end++;//end始終指向隊尾
while(end>head)
else if(arr[tx][ty]=='b'&&b
continue;
}else if(arr[tx][ty]=='c'&&c
else if(arr[tx][ty]=='d'&&d
else if(arr[tx][ty]=='e'&&e
//遇到鑰匙時收集鑰匙,並把鑰匙的位置初始化為路
else if(arr[tx][ty]=='a')
else if(arr[tx][ty]=='b')
else if(arr[tx][ty]=='c')
else if(arr[tx][ty]=='d')
else if(arr[tx][ty]=='e')
//遇到寶藏返回
if(arr[tx][ty]=='g')
//滿足條件的位置入佇列,並進行標記
s[end].x=tx;
s[end].y=ty;
arr1[tx][ty]=1;
end++;
}head++;//隊首位置的座標四個方向嘗試完後出隊}}
NYOJ 迷宮尋寶(一)
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個...
nyoj82迷宮尋寶(一)
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...
迷宮尋寶(一) nyoj 82
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...