?? 最終修改.txt
字號:
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<math.h>
struct change/////標記中轉一次時由起點到終點的所有屬性
{
char round[20];////中轉點名稱
char begin_line[20];////起始到中轉點要坐的車號
int begin_id;/////起點到中轉的id號
char end_line[20];///記錄中轉到終點的車號
int end_id;////中轉到終點的id號
int lu_cheng;/////要經過的路程數
};
struct together
{
char way[20];////標記是哪一路車
int num;////標記著一路車在整個路線的位置
};
char input1[20];////
char input2[20];////兩個字符數組,用于存放兩個輸入的字符
struct station
{
char name[20];////站點的名字
together biaoji[40];///包括車號和站點的排序
int num;////標記已經有了多少個站臺庫
int line_in;////標記有了多少條線路入棧
int quan;/////比較在模糊算法中的比較權值
// int way[100];////經過站點的車的車號
// int biaoji[200];////biaoji數組的作用是標明當前站臺是某一條公交線的正向第幾站
// station *next;///指向下一個站點
};
struct bus
{
// int num;////公交車的車號,整型值
char name[20];////公交車的車號
char line[50][20];///////記錄這一條公交線所經過的車站的名字
int geshu;////記錄這一條線共有多少條站
int id;/////用于記錄本站在bus_line數組中的標號
};
station stage[2000];
bus bus_line[200];
int stage_num=0;////record tmpe stage
int bus_num=0;///record temp bus
/*
int char_int(char m)
{
switch(m)
{
case '0':return 0;break;
case '1':return 1;break;
case '2':return 2;break;
case '3':return 3;break;
case '4':return 4;break;
case '5':return 5;break;
case '6':return 6;break;
case '7':return 7;break;
case '8':return 8;break;
case '9':return 9;break;
}
}
*/
///////將字符數組的值轉化為整數值//////
/*
int convert(char*p)
{
int tmp;////
tmp=char_int(p[0])*100+char_int(p[1])*10+char_int(p[2]);
return tmp;
}
*/
//////////***函數的作用是產生字符串比較的權值,看他們的相似程度***////////////
int mohu(char *mohu_in,char *have)
{
int tmp_num=0;
int ret_num=0;
int max;////數組中長度比較長的那一個的長度
int min;////數組中長度比較短的那一個
if(strlen(mohu_in)>=strlen(have))
{
max=strlen(mohu_in);
min=strlen(have);
}
else
{
max=strlen(have);
min=strlen(mohu_in);
}
for(int wife0=0;wife0<=(max-min);wife0++)////總共要比較的次數
{
for(int wife1=0;wife1<min;wife1++)///對于每一次比較而言所要比較的字符的數目
{
if(strlen(mohu_in)>=strlen(have))//////字符char0的長度大于字符串char1的情況
{
if(have[wife1]==mohu_in[wife1+wife0])
tmp_num++;
}
else
{
if(mohu_in[wife1]==have[wife1+wife0])
tmp_num++;
}
}
if(tmp_num>=ret_num)
ret_num=tmp_num;
tmp_num=0;
}
return ret_num;
}
///////////////////////****以上函數是模糊搜索要用到的函數*****///////////////////////////
////////****下面函數的作用是建立stage結構體和bus結構體*****////////////
void read_file(void)
{
char ch;
int tmp1=0;////用于記錄站牌的數字
int tmp2=0;////用于記錄在一條公交線上的站牌數量
int tmp3=0;////用于記錄一個站牌的字符到了第幾個
int enable_add_line=1;////允許現在是加入到公交線路中
ifstream infile;
infile.open("公交線路.txt");
while(infile>>ch)
{
if(ch==' ')continue;/////不考慮空格在其中的作用
if(ch==':')///////當遇到':'時表示公交線路名字的輸入結束,把輸入字符只當作字符來看
{
enable_add_line=0;
continue;
}
if(enable_add_line==1)
{
bus_line[bus_num].name[tmp1]=ch;
tmp1++;
// if(tmp1==3)tmp1=0;
//////****首先得到站牌的號碼***/////
}
else
{
if(ch==',')////tmp2記錄在每一條線上的站點
{
tmp2++;
tmp3=0;
}
else
{
if(ch==';')
{
enable_add_line=1;//////當遇到';'時表示一條公交線路的錄入結束了,允許加入到公交線的名字
bus_line[bus_num].id=bus_num;
//曹金燦改 bus_line[bus_num].num=convert(bus_line[bus_num].name);
bus_line[bus_num].geshu=tmp2;
bus_num++;////;為每一條線路的結束標志
tmp1=0;
tmp2=0;
tmp3=0;
///////***重新初始化等待下一次**//////
}
else
{
bus_line[bus_num].line[tmp2][tmp3]=ch;
// cout<<tmp2;
tmp3++;
}
}
}
}
infile.close();
}
/////////*****將TXT文檔中的值寫到bus_line結構體中*****//////////
///////****以下函數的的作用是處理站點所對應的公交線路的值****/////////
////////**以下的函數的處理可以在一個bus_line結構體數組中取值**///////
int judge(char*p1,char*p2)
{
int kk;
kk=strcmp(p1,p2);
if(kk==0)
return 1;/////相等為1,不相等為0
else
return 0;
}
void gene_station(void)
{
int tmp1;///記錄200條公交線進展到了哪一個
int tmp2;////一條公交線所經歷的站點數
int tmp3;///
int tmp4=0;////標記有了多少個站臺庫
int enable=1;/////標記要插入的的是不是有了,起先是都允許插入的,如果有相同的就不允許插入
int start_up=1;/////第一次初始化的標志位
int counter=0;////紀錄這是經過這一個站點的第幾條線
int flag_tmp=1;
for(tmp1=0;tmp1<=bus_num;tmp1++)////遍歷所有的公交線
{
//test else///////////***在以后的路線中,首先要查找和前面的是不是有重復,沒有重復再加入新的站點****///////////////
//test {
for(tmp2=0;tmp2<=bus_line[tmp1].geshu;tmp2++)///tmp2 指在一條公交線所經過的站點數
{
////查找和前面的是不是有重復///
for(tmp3=0;tmp3<=stage_num;tmp3++)/////tmp3標記現有的站點的數量
{
int cao;
cao=strcmp(bus_line[tmp1].line[tmp2],stage[tmp3].name);
if(cao==0)////如果相同則將車輛信息加入到這一個站點
{
stage[0].num=0;
strcpy(stage[tmp3].biaoji[stage[tmp3].line_in].way,bus_line[tmp1].name);
stage[tmp3].biaoji[stage[tmp3].line_in].num=tmp2;////一輛車的下行站點數
enable=0;
stage[tmp3].line_in++;
break;
}
}
//////////////////判斷重復結束///////////////////////
if(enable==1)////在查找的過程中如果沒有發現相同的則允許加入新的站點
{ ///**注意在新的站點加入的過程中,要將當前值紀錄進去**///
stage_num++;
tmp4++;
strcpy(stage[stage_num].name,bus_line[tmp1].line[tmp2]);
strcpy(stage[stage_num].biaoji[0].way,bus_line[tmp1].name);
stage[stage_num].biaoji[0].num=tmp2;////一輛車的下行站點數
stage[stage_num].num=stage_num;
stage[stage_num].line_in=1;/////標記入棧的已經有了一個
}
enable=1;/////為下一個站點的進入而準備
}
//test }
}
}
////////****站點錄入結束,已經成功****///////////
void main(void)
{
int begin_stage=-1;/////起點站所在整個stage隊列數組中的位置
int end_stage=-1;////終點站在整個stage隊列數組中的位置
int correct0=0;
int correct1=0;
int correct2=0;
//////////////////////////////////////////////
char same[20][20];//////用于記錄不需要轉車的交集
char same1_1[20][20];////用于記錄需要轉車時起點到中途的路徑
int same1_1counter=0;
char same1_2[20][20];///用于記錄需要轉車時從中轉站到終點的路徑,和上面一一對應
int same1_2counter=0;
///////////////////////////////////////////////////////
int same_counter0=0;/////用于記錄不要轉車的交集個數
int same_counter1=0;/////用于記錄要轉一次車的交集個數
int same_counter2=0;/////用于記錄要轉兩次車的交集個數
// char zhongtu0[20];/////用于中途轉車的地點
int enable_add=1;/////看當前的車站點是不是可以加入
int cross_stage=0;///計算從起始站可以到達的站臺的集合
char line_all[1000][20];/////用于記錄從起點站出發所有可能到達站的集合
char line_num[200][20];/////存放line_all數組站臺所經過的公交車的路數
int line_num_flag=0;/////已經有多少公交車進入line_num數組
int line_num_enable=1;
int zhongzhuan_counter=0;
// station begin[30];
// station end[30];
int out_enter=0;
change zhongzhuan[100];/////查詢時的中轉站
change least;///////存放臨時的zhongzhuan數組,用于排序
read_file();
gene_station();
//////////////////////////////////////
while(1)
{
int fun;
char input_line[10];
int boy0;
int girl0;
int boy1;
int girl1;
char input_stage[20];
char mind;
int compare;
int she;/////用在模糊函數的處理中
int xiao0[100];///找到最大權值的ID(num),有可能存在相同的權值
int xiao0_counter=0;
int xiao1=0;////臨時的值,
int tishi=0;/////輸入乘車的選擇方案以便具體給出經過哪些站點
int line_cmp_result;
cout<<" 功能菜單選項"<<endl;
cout<<endl;
cout<<" 0.退出"<<endl;
cout<<endl;
cout<<" 1.查詢某一條公交線的狀況"<<endl;
cout<<endl;
cout<<" 2.查詢經過某一個站點的所有的公交線路"<<endl;
cout<<endl;
cout<<" 3.查詢從起點到終點的所有路徑"<<endl;
cout<<endl;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -