Ödev (C dili)
4
●185
- 19-12-2019, 17:57:00Programlama 1 lab dersi için verilen buna benzer bir ödevimiz vardı. Kendi yazdığım kodu bulamadım. Ancak sınıftan bir arkadaşımın yazdığı kodu buraya bırakıyorum. Kodun genel mantığı 7x13 matristeki en kısa yolu bulmak. Bu kodu siz istediğiniz şekilde uyarlayabilirsiniz ya da en azından bir fikir verebilir. 3 farklı matrixte kısa yolları buluyordu. İlk çalıştırdığınızda kod bütün adımların çıktısını yazdırıyor.
#include <stdio.h> #include <stdlib.h> int pathLength[4]={1,1,1,1}; int i,j; static int matrix[7][13]= {{3,0,1,1,1,0,0,1,0,1,1,0}, {1,0,0,1,1,1,1,0,1,0,0,0}, {1,1,1,1,1,1,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,1,1,1,1}, {0,1,0,1,1,1,1,1,1,0,0,1}, {1,1,1,0,1,1,1,0,1,1,1,1}}; static int atrix[7][13]= {{3,0,1,1,1,0,0,1,0,1,1,0}, {1,0,0,1,1,1,1,0,1,0,0,0}, {1,1,1,1,1,1,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,1,1,1,1}, {0,1,0,1,1,1,1,1,1,0,0,1}, {1,1,1,0,1,1,1,0,1,1,1,1}}; static int trix[7][13]= {{3,0,1,1,1,0,0,1,0,1,1,0}, {1,0,0,1,1,1,1,0,1,0,0,0}, {1,1,1,1,1,1,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,1,1,1,1}, {0,1,0,1,1,1,1,1,1,0,0,1}, {1,1,1,0,1,1,1,0,1,1,1,1}}; static int rix[7][13]= {{3,0,1,1,1,0,0,1,0,1,1,0}, {1,0,0,1,1,1,1,0,1,0,0,0}, {1,1,1,1,1,1,1,0,1,0,1,0}, {0,1,0,1,0,1,0,1,1,1,1,1}, {0,1,0,1,1,1,1,1,1,0,0,1}, {1,1,1,0,1,1,1,1,1,1,1,1}}; int path(int a,int b) { printf("========= %d ==========n",pathLength[0]); printf("========[%d][%d]=========n",a,b); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",matrix[i][j]); } printf("n"); } printf("n"); printf("n"); printf("n"); if(a==5&&b==11) { printf(" ========= %d [%d][%d]=========n",pathLength[0],a,b); printf("*****1.PATH FOUND*****n"); return pathLength[0]; } if((matrix[a][b]==0)&&((matrix[a][b+1]==1)||(matrix[a+1][b]==1)||(matrix[a][b-1]==1)||(matrix[a-1][b]==1))) { matrix[a][b]+=3; } if(matrix[a][b+1]==1&&(b<11)) { matrix[a][b+1]+=2; pathLength[0]+=1; return path(a,b+1); } if(matrix[a+1][b]==1&&(a<5)) { matrix[a+1][b]+=2; pathLength[0]+=1; return path(a+1,b); } if(matrix[a][b-1]==1&&(b>0)) { matrix[a][b-1]+=2; pathLength[0]+=1; return path(a,b-1); } if(matrix[a-1][b]==1&&(b>0)) { matrix[a-1][b]+=2; pathLength[0]+=1; return path(a-1,b); } // *********************reversePath********************* if ((matrix[a][b+1]!=1)||(matrix[a][b-1]!=1)||(matrix[a+1][b]!=1)||(matrix[a-1][b]!=1)) { matrix[a][b]=0; if(matrix[a][b-1]==3) { matrix[a][b-1]=0; pathLength[0]-=1; return path(a,b-1); } if(matrix[a-1][b]==3) { matrix[a-1][b]=0; pathLength[0]-=1; return path(a-1,b); } if(matrix[a][b+1]==3) { matrix[a][b+1]=0; pathLength[0]-=1; return path(a,b+1); } if(matrix[a+1][b]==3) { matrix[a+1][b]=0; pathLength[0]-=1; return path(a+1,b); } } } int path1(int c,int d) { printf("========= %d ==========n",pathLength[1]); printf("========[%d][%d]========n",c,d); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",atrix[i][j]); } printf("n"); } printf("n"); printf("n"); printf("n"); if(c==5&&d==11) { printf(" ========= %d [%d][%d]=========n",pathLength[1],c,d); printf("*****2.PATH FOUND*****n"); return pathLength[1]; } if((atrix[c][d]==0)&&((atrix[c][d+1]==1)||(atrix[c+1][d]==1)||(atrix[c][d-1]==1)||(atrix[c-1][d]==1))) { atrix[c][d]+=3; } if(atrix[c-1][d]==1&&(d>0)) { atrix[c-1][d]+=2; pathLength[1]+=1; return path1(c-1,d); } if(atrix[c][d+1]==1&&(c<11)) { atrix[c][d+1]+=2; pathLength[1]+=1; return path1(c,d+1); } if(atrix[c+1][d]==1&&(c<5)) { atrix[c+1][d]+=2; pathLength[1]+=1; return path1(c+1,d); } if(atrix[c][d-1]==1&&(d>0)) { atrix[c][d-1]+=2; pathLength[1]+=1; return path1(c,d-1); } // *********************reversePath********************* if ((atrix[c][d+1]!=1)||(atrix[c][d-1]!=1)||(atrix[c+1][d]!=1)||(atrix[c-1][d]!=1)) { atrix[c][d]=0; if(atrix[c+1][d]==3) { atrix[c+1][d]=0; pathLength[1]-=1; return path1(c+1,d); } if(atrix[c][d-1]==3) { atrix[c][d-1]=0; pathLength[1]-=1; return path1(c,d-1); } if(atrix[c-1][d]==3) { atrix[c-1][d]=0; pathLength[1]-=1; return path1(c-1,d); } if(atrix[c][d+1]==3) { atrix[c][d+1]=0; pathLength[1]-=1; return path1(c,d+1); } } } int path2(int c,int d) { printf("========= %d ==========n",pathLength[2]); printf("========[%d][%d]========n",c,d); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",trix[i][j]); } printf("n"); } printf("n"); printf("n"); printf("n"); if(c==5&&d==11) { printf(" ========= %d [%d][%d]=========n",pathLength[2],c,d); printf("*****3.PATH FOUND*****n"); return pathLength[2]; } if((trix[c][d]==0)&&((trix[c][d+1]==1)||(trix[c+1][d]==1)||(trix[c][d-1]==1)||(trix[c-1][d]==1))) { trix[c][d]+=3; } if(trix[c][d-1]==1&&(d>0)) { trix[c][d-1]+=2; pathLength[2]+=1; return path2(c,d-1); } if(trix[c+1][d]==1&&(c<5)) { trix[c+1][d]+=2; pathLength[2]+=1; return path2(c+1,d); } if(trix[c][d+1]==1&&(c<11)) { trix[c][d+1]+=2; pathLength[2]+=1; return path2(c,d+1); } if(trix[c-1][d]==1&&(d>0)) { trix[c-1][d]+=2; pathLength[2]+=1; return path2(c-1,d); } // *********************reversePath********************* if ((trix[c][d+1]!=1)||(trix[c][d-1]!=1)||(trix[c+1][d]!=1)||(trix[c-1][d]!=1)) { trix[c][d]=0; if(trix[c][d+1]==3) { trix[c][d+1]=0; pathLength[2]-=1; return path2(c,d+1); } if(trix[c-1][d]==3) { trix[c-1][d]=0; pathLength[2]-=1; return path2(c-1,d); } if(trix[c][d-1]==3) { trix[c][d-1]=0; pathLength[2]-=1; return path2(c,d-1); } if(trix[c+1][d]==3) { trix[c+1][d]=0; pathLength[2]-=1; return path2(c+1,d); } } } int path3(int c,int d) { printf("========= %d ==========n",pathLength[3]); printf("========[%d][%d]========n",c,d); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",rix[i][j]); } printf("n"); } printf("n"); printf("n"); printf("n"); if(c==5&&d==11) { printf(" ========= %d [%d][%d]=========n",pathLength[3],c,d); printf("*****4.PATH FOUND*****nnn"); return pathLength[3]; } if((rix[c][d]==0)&&((rix[c][d+1]==1)||(rix[c+1][d]==1)||(rix[c][d-1]==1)||(rix[c-1][d]==1))) { rix[c][d]+=3; } if(rix[c+1][d]==1&&(c<5)) { rix[c+1][d]+=2; pathLength[3]+=1; return path3(c+1,d); } if(rix[c][d+1]==1&&(c<11)) { rix[c][d+1]+=2; pathLength[3]+=1; return path3(c,d+1); } if(rix[c][d-1]==1&&(d>0)) { rix[c][d-1]+=2; pathLength[3]+=1; return path3(c,d-1); } if(rix[c-1][d]==1&&(d>0)) { rix[c-1][d]+=2; pathLength[3]+=1; return path3(c-1,d); } // *********************reversePath********************* if ((rix[c][d+1]!=1)||(rix[c][d-1]!=1)||(rix[c+1][d]!=1)||(rix[c-1][d]!=1)) { rix[c][d]=0; if(rix[c-1][d]==3) { rix[c-1][d]=0; pathLength[3]-=1; return path3(c-1,d); } if(rix[c][d-1]==3) { rix[c][d-1]=0; pathLength[3]-=1; return path3(c,d-1); } if(rix[c][d+1]==3) { rix[c][d+1]=0; pathLength[3]-=1; return path3(c,d+1); } if(rix[c+1][d]==3) { rix[c+1][d]=0; pathLength[3]-=1; return path3(c+1,d); } } } int main() { int k,l,m,n,tmp; k=path(0,0); l=path1(0,0); m=path2(0,0); n=path3(0,0); printf("1.%d 2.%d 3.%d 4.%dn",k,l,m,n); if(k<17) { k=999; } if(l<17) { l=999; } if(m<17) { m=999; } if(n<17) { n=999; } // printf("1.%d 2.%d 3.%d 4.%dnnn",k,l,m,n); int min[4]={k,l,m,n}; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (min[i] < min[j]) { int tmp = min[i]; min[i] = min[j]; min[j] = tmp; } } } if(min[0]==k) { printf(" 1.function foundn=the shortest path=n"); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",matrix[i][j]); } printf("n"); } return 0; } if(min[0]==l) { printf(" 2.function foundn=the shortest path=n"); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",atrix[i][j]); } printf("n"); } return 0; } if(min[0]==m) { printf(" 3.function foundn=the shortest path=n"); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",trix[i][j]); } printf("n"); } return 0; } if(min[0]==n) { printf(" 4.function foundn=the shortest path=n"); for(i=0;i<6;i++) { for(j=0;j<12;j++) { printf("%d ",rix[i][j]); } printf("n"); } return 0; } return 0; }Kaynak: Github - 21-12-2019, 23:50:08Bu sorunun daha gelişmiş halini ve pacman tarzı içinde koşuşturma olacak şekilde kötü karakterler iyi karakteri kovalayacak şekilde bize 2.sınıfta soruldu.Emsar adlı üyeden alıntı: mesajı görüntüle