10 이하의 n을 입력하고 n x n크기의 2차원 수열에 1과 0을 채워넣어 길을 만든다. 1은 길이고 0은 지나갈 수 없다. 출력은 출발점(0,0) 에서부터 도착점(n-1,n-1)에 도달할 수 있는 모든 경로중 가장 짧은 경로의 길이를 출력하면 된다.
#include <iostream>
#include <windows.h>
using namespace std;
int a[10][10];
int n,m=100;//최소 경로는 100이 최대이다.
void move(int y,int x, int c){
c++;//한칸 움직일 때마다 카운트를 해준다.
if(x==n-1&y==n-1){
if(m>c)m=c;//최소경로보다 c가 작으면 갱신.
c=0;
return;
}
a[y][x]=0;//경로를 되돌아 오는 것을 막기위해 0으로 바꾼다.
if(x>0&&a[y][x-1]==1)move(y,x-1,c);
if(y>0&&a[y-1][x]==1)move(y-1,x,c);
if(x<n-1&&a[y][x+1]==1)move(y,x+1,c);
if(y<n-1&&a[y+1][x]==1)move(y+1,x,c);
return;
}
int main(){
int i,j;
cin>>n;
for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>a[i][j];
move(0,0,0);//시작점으로 이동하기전 이동거리는 0이다.
cout<<m<<endl;
system("PAUSE");
return 0;
}
실행결과
10
1 1 1 0 1 1 1 0 0 0
0 0 1 0 1 0 1 1 1 1
0 1 1 1 1 0 0 0 0 1
1 1 0 0 0 1 1 1 1 1
1 0 0 0 0 1 0 0 0 0
1 0 0 0 0 1 1 1 1 1
1 0 1 1 1 0 0 0 0 1
1 0 1 0 1 0 0 0 0 1
1 0 1 0 1 0 0 0 0 1
1 1 1 0 1 1 1 1 1 1
29
Press any key to continue . . .
그런데 이 프로그램도 경로의 수를 구하는 프로그램 http://khgkjg12.blogspot.kr/2016/07/c_26.html 과 마찬가지로 중간에 합류지점이 있는 경로는 검색이 불가능 하다. 따라서 경로가 중간에 갈릴 순 있어도 합류되는 경로를 입력하면 안된다.
#include <iostream>
#include <windows.h>
using namespace std;
int a[10][10];
int n,m=100;//최소 경로는 100이 최대이다.
void move(int y,int x, int c){
c++;//한칸 움직일 때마다 카운트를 해준다.
if(x==n-1&y==n-1){
if(m>c)m=c;//최소경로보다 c가 작으면 갱신.
c=0;
return;
}
a[y][x]=0;//경로를 되돌아 오는 것을 막기위해 0으로 바꾼다.
if(x>0&&a[y][x-1]==1)move(y,x-1,c);
if(y>0&&a[y-1][x]==1)move(y-1,x,c);
if(x<n-1&&a[y][x+1]==1)move(y,x+1,c);
if(y<n-1&&a[y+1][x]==1)move(y+1,x,c);
return;
}
int main(){
int i,j;
cin>>n;
for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>a[i][j];
move(0,0,0);//시작점으로 이동하기전 이동거리는 0이다.
cout<<m<<endl;
system("PAUSE");
return 0;
}
실행결과
10
1 1 1 0 1 1 1 0 0 0
0 0 1 0 1 0 1 1 1 1
0 1 1 1 1 0 0 0 0 1
1 1 0 0 0 1 1 1 1 1
1 0 0 0 0 1 0 0 0 0
1 0 0 0 0 1 1 1 1 1
1 0 1 1 1 0 0 0 0 1
1 0 1 0 1 0 0 0 0 1
1 0 1 0 1 0 0 0 0 1
1 1 1 0 1 1 1 1 1 1
29
Press any key to continue . . .
그런데 이 프로그램도 경로의 수를 구하는 프로그램 http://khgkjg12.blogspot.kr/2016/07/c_26.html 과 마찬가지로 중간에 합류지점이 있는 경로는 검색이 불가능 하다. 따라서 경로가 중간에 갈릴 순 있어도 합류되는 경로를 입력하면 안된다.
댓글
댓글 쓰기